Момент JavaScript - получить различия между двумя датами

1

Я пытаюсь получить даты различия между сегодняшней датой и датой назначения в 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 (что правильно), как я могу создать правильно форматирующие данные?

Теги:
date
momentjs

3 ответа

1
Лучший ответ

Формат даты не является стандартным, в этом случае явно указывается, как второй параметр или разбор не будет выполняться в разных браузерах.

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>
  • 0
    кажется законным, но зачем возвращать отрицательное число?
  • 0
    Отрицательное число? NaN - это не число, если вы имеете в виду это.
Показать ещё 2 комментария
4

Почему вы форматируете момент для строки, чтобы снова проанализировать ее снова? Нет смысла делать это.

Использовать 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>
  • 0
    прохладно! но последнее, гуманизированное возвращение мне 7 дней, но если я хочу разницу в формате ДД / ММ / ГГГГ ЧЧ: мм: сс?
  • 0
    Я не уверен, как бы вы отобразили разницу в этом формате. Если вы хотите, чтобы разница, дни, месяцы, годы ... отличались, вы можете показать это вместо использования гуманизации. Я добавил что-то, может быть, это то, что вам нужно @PdsInk
0

Вы также можете использовать Date.parse() для преобразования дат в миллисекунды, а затем найти разницу.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню