Истинный объект Date во многих языках представляет собой числовое представление времени из некоторого значения Epoch.Javascript использует количество миллисекунд с начала эпохи Unix 1 января 1970 года до полуночи.Таким образом, чтобы найти разницу между двумя датами, это может быть простая математика:
Для d1 = '2020-01-01' и d2 = '2021-01-01'
new Date(d2) - new Date(d1)
Что даст вам разницу в миллисекундах между двумя датами.Если вы хотите, вы можете проверить, меньше ли d1
чем d2
или что-либо еще, или вы можете просто установить абсолютное значение, чтобы получить разницу, независимо от того, какое из них больше.Обратите внимание, что здесь не учитывается элемент time
.Если вы хотите учесть это, есть еще пара шагов.
Но теперь, когда у нас есть разница в миллисекундах, нам нужно преобразовать ее в дни.
В одном дне 86 400 000 миллисекунд, поэтому мы можем просто разделить нашу стоимость на это, чтобы получить дни.
(new Date(d2) - new Date(d1))/86400000
Но это потенциально даст нам десятичное число.Таким образом, мы должны избавиться от этого.Math
снова на помощь.
Math.floor( Math.abs((new Date(d2) - new Date(d1)))/86400000 )
Затем мы превращаем все это в функцию, чтобы мы могли использовать ее снова.
function getDaysBetween(d1,d2){
return ( Math.floor( Math.abs((new Date(d2) - new Date(d1)))/86400000 ) ) ;
}
Так console.log( getDaysDiff('2020-01-01','2021-01-01') ) ;
даст нам 366
.Javascript Date
объект учитывает Leap Days, но не учитывает Leap Seconds.Если это проблема, вам придется ее учитывать.Также обратите внимание, что если вы заботитесь о датах из разных часовых поясов, вам, возможно, придется учитывать это также.Моя функция выше рассчитывает только разницу дней.Поэтому, если у вас есть две даты из двух часовых поясов (1 января 2019 г. 01:00 и 2 января 2019 г. 01:00), вы можете корректно учесть разницу часовых поясов.
Кроме того, я не проверяю ошибки вПодтвердите, что вы передали функции действительную дату.Если он недействителен, вы получите NaN
результат.
function getDaysBetween(d1,d2){
return ( Math.floor( Math.abs((new Date(d2) - new Date(d1)))/86400000 ) ) ;
}
console.log( getDaysBetween('2020-01-01','2021-01-01') ) ;
d1 = '09/24/2019' ;
d2 = '09/30/2019' ;
d3 = '10/01/2019' ;
console.log(getDaysBetween(d1,d2)); //6
console.log(getDaysBetween(d1,d3)); //7
https://jsfiddle.net/tgy4qr7n/
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date