Я вычисляю количество дней между датой «от» и «до». Например, если дата с 13/04/2010 и на сегодняшний день составляет 15/04/2010, результат должен бытьКак рассчитать количество дней между двумя датами?
Как получить результат с помощью JavaScript?
ответ
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)));
Here's a function, что делает это:
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)
}
Скорректированная для обеспечения экономии дневного света различия. попробуйте это:
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;
}
Нет необходимости корректировать смещение часового пояса, значение времени указано в формате UTC. Если есть необходимость в настройке часового пояса, его можно применить непосредственно к протоколам с помощью 'setMinutes()' вместо того, чтобы конвертировать в часы и использовать 'setHours()'. Аргументы методов 'set' должны быть целыми числами. Если использование 'setHours' и смещение не равно кратным часам, значение будет усечено. – RobG
Я написал это решение для другого поста, который спросил, как вычислить разницу между двумя датами, поэтому я разделяю то, что я подготовил:
// 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/
Обратите внимание, что месяцы индексируются с нулевым значением, поэтому вы должны иметь новую дату (date1 [0], --date1 [1], date1 [2]); '. Кроме того, использование 'parseInt' будет усекать миллисекунды. Проще просто вычесть объекты даты и преобразовать разницу в дни: 'Math.round ((date1 - date2)/8.64e7)' или если целые дни требуются без округления, просто усечь десятичную часть: '(date1 - date2)/8,64e7 | 0'. – RobG
Вот что я использую. Если вы просто вычтите даты, это не будет работать во время границы дневного времени (например, с 1 апреля по 30 апреля или с 1 октября по 31 октября). Это сокращает все часы, чтобы удостовериться, что вы получаете день и устраняет любую проблему DST с помощью UTC.
var nDays = ( Date.UTC(EndDate.getFullYear(), EndDate.getMonth(), EndDate.getDate()) -
Date.UTC(StartDate.getFullYear(), StartDate.getMonth(), StartDate.getDate()))/86400000;
Но если вы уроните часы и т. Д., Почему бы вам по-прежнему использовать UTC? –
@RuudLenders, потому что день в UTC всегда длится 24 часа, в отличие от других форматов времени, так что безопасно делить на 24 часа – Dan
Из моей маленькой разницы Дата калькулятор:
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();
Мне пришлось вытащить из 0,5 функции раунда, чтобы он нормально работал по какой-то причине, м, думая, что это было из-за минуса 1 за месяц с момента его индексации – Yohn
Вот моя реализация:
function daysBetween(one, another) {
return Math.round(Math.abs((+one) - (+another))/8.64e7);
}
+<date>
делает тип принуждения к целочисленного представления и имеет тот же эффект, как <date>.getTime()
и 8.64e7
это количество миллисекунд в день.
. Принуждение типа избыточно здесь, потому что вы уже используете арифметический оператор, чтобы вычитать даты (что также приводит к принуждению типа). Поэтому вы можете написать это следующим образом: 'Math.round (Math.abs (один - другой)/8.64e7);' – A1rPun
- 1. Как рассчитать количество дней между двумя датами
- 2. Рассчитать количество дней между двумя датами?
- 3. Количество дней между двумя датами
- 4. Количество дней между двумя заданными датами
- 5. PDF Javascript Рассчитать количество дней между датами
- 6. Как рассчитать количество десятилетий между двумя датами
- 7. Как рассчитать количество дней между двумя датами в R
- 8. Как рассчитать количество рабочих дней между двумя датами?
- 9. Как рассчитать количество дней между двумя разными датами
- 10. Как рассчитать количество дней между двумя датами в Perl?
- 11. Как рассчитать количество дней между двумя датами, используя Python?
- 12. как рассчитать количество дней между двумя датами, включая обе даты
- 13. Как рассчитать количество дней (разницу) между двумя датами в PHP?
- 14. Как рассчитать общее количество дней между двумя датами в заводных
- 15. Как рассчитать количество недель, дней между двумя датами
- 16. Подсчитайте количество рабочих дней между двумя датами?
- 17. Количество дней между двумя датами в Android
- 18. Spark - Scala - количество дней между двумя датами
- 19. Показывать количество дней между двумя датами датпикера?
- 20. Рассчитать количество дней недели между двумя датами в C#
- 21. Рассчитать количество дней в месяце между двумя датами
- 22. Как узнать количество дней между двумя датами
- 23. Как получить количество дней между двумя датами
- 24. , чтобы рассчитать количество дней между двумя датами в dql documentum
- 25. Рассчитать количество дней между двумя датами (без использования модулей)
- 26. Рассчитать количество дней между двумя датами с использованием Python
- 27. Рассчитать количество рабочих дней между двумя датами в power pivot
- 28. Рассчитать количество дней между двумя датами в r
- 29. Рассчитать количество дней между двумя датами в java
- 30. Javascript/JQuery/Moment.js рассчитать количество дней между двумя датами
Предупреждение: не все дни 24 часа. Если в вашем диапазоне дат изменяется переход на летнее время, вы потеряете или получите час (обычно). Используйте результат Math.round() (избегайте пола или потолка). – Mark
На самом деле, я предпочел Math.ceil здесь, так как даже если осталось 2.01 дней, говоря, что осталось 3 дня, больше смысла, что sayin осталось 2 дня. – 5hahiL
Удивительный мужчина !!! –