Я пытаюсь получить даты различия между сегодняшней датой и датой назначения в moment.js, вот что я делаю:
var now = moment().format('DD/MM/YYYY HH:mm:ss');
var then = moment("15/09/2017 14:20:30").format('DD/MM/YYYY HH:mm:ss');
//here i try the difference
var diffTime = moment.utc(moment(now).diff(moment(then)));
console.log("differenza per countdown "+diffTime);
Консоль.log вернет мне "Недействительная дата", но если теперь я использую "then", она вернет мне 0 (что правильно), как я могу создать правильно форматирующие данные?
Формат даты не является стандартным, в этом случае явно указывается, как второй параметр или разбор не будет выполняться в разных браузерах.
moment("15/09/2017 14:20:30", 'DD/MM/YYYY HH:mm:ss')
Ответ: Да, нет никакой ценности при преобразовании в строку и ее синтаксическом анализе до тех пор, пока у вас не будет другой логики.
window.onload = function(){
var now = moment().format('DD/MM/YYYY HH:mm:ss');
var then = moment("15/09/2017 14:20:30", 'DD/MM/YYYY HH:mm:ss').format('DD/MM/YYYY HH:mm:ss');
//here i try the difference
var diffTime = moment.utc(moment(now, 'DD/MM/YYYY HH:mm:ss').diff(moment(then, 'DD/MM/YYYY HH:mm:ss')));
console.log("differenza per countdown "+diffTime);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment-with-locales.min.js"></script>
Для меня результат NaN
но синтаксический анализ даты может отличаться от браузеров.
window.onload = function(){
var now = moment().format('DD/MM/YYYY HH:mm:ss');
var then = moment("15/09/2017 14:20:30").format('DD/MM/YYYY HH:mm:ss');
//here i try the difference
var diffTime = moment.utc(moment(now).diff(moment(then)));
console.log("differenza per countdown "+diffTime);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment-with-locales.min.js"></script>
Почему вы форматируете момент для строки, чтобы снова проанализировать ее снова? Нет смысла делать это.
Использовать moment.duration по разнице:
var now = moment();
var then = moment("15/09/2017 14:20:30", "DD/MM/YYYY HH:mm:ss");
//here i try the difference
var diffTime = moment.duration(then.diff(now));
console.log("differenza per countdown "+diffTime);
console.log("humanized: " + diffTime.humanize(true));
console.log(diffTime.days() + "/" + diffTime.months() + "/" + diffTime.years() + " " + diffTime.hours() + ":" + diffTime.minutes() + ":" + diffTime.seconds());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment-with-locales.min.js"></script>
Вы также можете использовать Date.parse()
для преобразования дат в миллисекунды, а затем найти разницу.
NaN
- это не число, если вы имеете в виду это.