Я выполняю функцию в Javascript, например VisualBasic DateDiff.
Вы указываете две даты и интервал времени возврата (секунды, минуты, дни и т. д.)
DateDiff(ByVal Interval As Microsoft.VisualBasic.DateInterval, _
ByVal Date1 As Date, ByVal Date2 As Date) as Long
Итак, как лучше всего рассчитать разницу дат Javascript?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Если вы следуете этому руководство, один из способов - использовать:
Date.getTime()
Вы найдете полный функция javascript здесь с подтверждением даты.
При этом, как прокомментировал Рафи Б. 5 лет спустя, «Получить разницу между двумя датами в javascript?» является более точным.
var _MS_PER_DAY = 1000 * 60 * 60 * 24;
// a and b are javascript Date objects
function dateDiffInDays(a, b) {
// Discard the time and time-zone information.
var utc1 = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate());
var utc2 = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate());
return Math.floor((utc2 - utc1) / _MS_PER_DAY);
}
Если вы установите с 14:00 до 23:59 в тот же день, он показывает неправильный час. Вместо 10 часов он дает 10:59. Вы можете это проверить?
@jewelhuq, 8 лет спустя, мне понадобится немного больше деталей. Можно отдельный вопрос задать?
var start = new Date ("2016-12-24 14:00"); var end = new Date ("2016-12-24 23:59"); var diffMs = (end.getTime () - start.getTime ()); // миллисекунды между настоящим моментом и Рождеством var diffDays = Math.round (diffMs / 86400000); // дней var diffHrs = Math.round ((diffMs% 86400000) / 3600000); // часы ar diffMins = Math.round (((diffMs% 86400000)% 3600000) / 60000); // минуты console.info (diffHrs); он возвращается в 10:59, работает нормально до 23:00. в чем проблема.
@jewelhuq Примечание: ссылка javascript.internet.com больше не действительна. Я восстановил его. Я также указал на более точное решение. Наконец, что касается вашего последнего комментария, его лучше всего задать в новом вопросе.
какое решение более точное?
@jewelhuq тот, который я описываю в отредактированном ответе как более точный: stackoverflow.com/a/15289883/6309
Позвольте нам продолжить обсуждение в чате.
Используйте Дата объекта так:
function DateDiff(var /*Date*/ date1, var /*Date*/ date2) {
return date1.getTime() - date2.getTime();
}
Это вернет разницу в миллисекундах между двумя датами. Преобразование в секунды, минуты, часы и т. д. Не должно быть слишком сложным.
Вам не нужно использовать getTime. Если вы просто выполните return date1 - date2;, результат будет тот же. (И это не относится к конкретной реализации, это указано в спецификации, хотя и несколько косвенно).
Я бы рекомендовал использовать return date2.getTime() - date1.getTime();, чтобы порядок дат соответствовал ожиданиям (в противном случае будет возвращено отрицательное число).
Этот ответ принят, но, к сожалению, неверен. Попробуйте код new Date(new Date()-new Date());
@ PéterVarga Зачем ты оборачиваешь его в другой new Date()? В случае, если вы описываете результат, который интересует OP, это 0, а не new Date(0);
Shouldn't be too difficult. Хм, правда? Подсчет месяцев / лет затруднен (если даже возможно), мы должны использовать информацию when и where для подсчета dst, високосных лет и т. д.
Дубликат: stackoverflow.com/questions/41948/…