-
Я вычисляю количество дней между датами 'from' и 'to'. Например, если дата с 13/04/2010, а на сегодняшний день - 15/04/2010, результат должен быть
-
Как получить результат с помощью JavaScript?
Как рассчитать количество дней между двумя датами?
Ответ 1
var oneDay = 24*60*60*1000; // hours*minutes*seconds*milliseconds
var firstDate = new Date(2008,01,12);
var secondDate = new Date(2008,01,22);
var diffDays = Math.round(Math.abs((firstDate.getTime() - secondDate.getTime())/(oneDay)));
Ответ 2
Вот функция, которая делает это:
function days_between(date1, date2) {
// The number of milliseconds in one day
var ONE_DAY = 1000 * 60 * 60 * 24;
// Convert both dates to milliseconds
var date1_ms = date1.getTime();
var date2_ms = date2.getTime();
// Calculate the difference in milliseconds
var difference_ms = Math.abs(date1_ms - date2_ms);
// Convert back to days and return
return Math.round(difference_ms/ONE_DAY);
}
Ответ 3
Вот что я использую. Если вы просто вычтете даты, они не будут работать за границей перехода на летнее время (например, с 1 апреля по 30 апреля или с 1 октября по 31 октября). Это сокращает все часы, чтобы обеспечить вам день, и устраняет любую проблему с летним временем, используя UTC.
var nDays = ( Date.UTC(EndDate.getFullYear(), EndDate.getMonth(), EndDate.getDate()) -
Date.UTC(StartDate.getFullYear(), StartDate.getMonth(), StartDate.getDate())) / 86400000;
как функция:
function DaysBetween(StartDate, EndDate) {
// The number of milliseconds in all UTC days (no DST)
const oneDay = 1000 * 60 * 60 * 24;
// A day in UTC always lasts 24 hours (unlike in other time formats)
const start = Date.UTC(EndDate.getFullYear(), EndDate.getMonth(), EndDate.getDate());
const end = Date.UTC(StartDate.getFullYear(), StartDate.getMonth(), StartDate.getDate());
// so it safe to divide by 24 hours
return (start - end) / oneDay;
}
Ответ 4
Вот моя реализация:
function daysBetween(one, another) {
return Math.round(Math.abs((+one) - (+another))/8.64e7);
}
+<date>
имеет отношение типа к целочисленному представлению и имеет тот же эффект, что и <date>.getTime()
и 8.64e7
- количество миллисекунд в день.
Ответ 5
Скорректирована с учетом различий при дневном свете. попробуйте следующее:
function daysBetween(date1, date2) {
// adjust diff for for daylight savings
var hoursToAdjust = Math.abs(date1.getTimezoneOffset() /60) - Math.abs(date2.getTimezoneOffset() /60);
// apply the tz offset
date2.addHours(hoursToAdjust);
// The number of milliseconds in one day
var ONE_DAY = 1000 * 60 * 60 * 24
// Convert both dates to milliseconds
var date1_ms = date1.getTime()
var date2_ms = date2.getTime()
// Calculate the difference in milliseconds
var difference_ms = Math.abs(date1_ms - date2_ms)
// Convert back to days and return
return Math.round(difference_ms/ONE_DAY)
}
// you'll want this addHours function too
Date.prototype.addHours= function(h){
this.setHours(this.getHours()+h);
return this;
}
Ответ 6
Я написал это решение для другого сообщения, который спросил, как рассчитать разницу между двумя датами, поэтому я разделяю то, что я подготовил:
// Here are the two dates to compare
var date1 = '2011-12-24';
var date2 = '2012-01-01';
// First we split the values to arrays date1[0] is the year, [1] the month and [2] the day
date1 = date1.split('-');
date2 = date2.split('-');
// Now we convert the array to a Date object, which has several helpful methods
date1 = new Date(date1[0], date1[1], date1[2]);
date2 = new Date(date2[0], date2[1], date2[2]);
// We use the getTime() method and get the unixtime (in milliseconds, but we want seconds, therefore we divide it through 1000)
date1_unixtime = parseInt(date1.getTime() / 1000);
date2_unixtime = parseInt(date2.getTime() / 1000);
// This is the calculated difference in seconds
var timeDifference = date2_unixtime - date1_unixtime;
// in Hours
var timeDifferenceInHours = timeDifference / 60 / 60;
// and finaly, in days :)
var timeDifferenceInDays = timeDifferenceInHours / 24;
alert(timeDifferenceInDays);
Вы можете пропустить некоторые шаги в коде, я написал его так, чтобы было легко понять.
Здесь вы найдете пример: http://jsfiddle.net/matKX/
Ответ 7
Из моего калькулятора разницы в день:
var startDate = new Date(2000, 1-1, 1); // 2000-01-01
var endDate = new Date(); // Today
// Calculate the difference of two dates in total days
function diffDays(d1, d2)
{
var ndays;
var tv1 = d1.valueOf(); // msec since 1970
var tv2 = d2.valueOf();
ndays = (tv2 - tv1) / 1000 / 86400;
ndays = Math.round(ndays - 0.5);
return ndays;
}
Итак, вы бы назвали:
var nDays = diffDays(startDate, endDate);
(Полный источник http://david.tribble.com/src/javascript/jstimespan.html.)
Добавление
Код можно улучшить, изменив следующие строки:
var tv1 = d1.getTime(); // msec since 1970
var tv2 = d2.getTime();