2015-05-02 7 views
0

Имея действительно странную проблему, я не могу точно определить. Я попробовал несколько разных вариантов, чтобы получить количество дней между двумя датами в JS. По большей части (в 99% случаев) нижеследующее отлично работает, но я получаю некоторые неправильные результаты ** иногда, когда я пересекаю месяцы. Например, если я получаю количество дней между 31 июля 2015 года и 1 августа 2015 года, он правильно возвращает 1. Однако, если я попытаюсь захватить количество дней между 30 июня 2015 года и 1 июля 2015 года, я получаю результат 2 дня (в июне всего 30 дней, я дважды проверял). Это что-то с моей серверной средой, или я схожу с ума?Получите разницу между двумя датами с использованием вопроса JS

start_date = new Date(start); // assuming the format is correct 
end_date = new Date(ends); // assuming the format is correct 
diff_ms = end_date.getTime() - start_date.getTime(); 
var days = diff_ms/86400000; 

Я также попытался следующие, и получили те же результаты:

start_date = new Date(start); // assuming the format is correct 
end_date = new Date(ends); // assuming the format is correct 
var timeDiff = Math.abs(end_date.getTime() - start_date.getTime()); 
var days = Math.ceil(timeDiff/(1000 * 3600 * 24)); 
+1

Как выглядят ваши стартовые строки, когда вы получаете странные ответы? – Pointy

+0

Я получаю '1':' var d1 = new Date (2015, 05, 30); var d2 = новая дата (2015, 06, 1); (D2-d1)/86400000; '. – leaf

+1

Вы можете начать с предположения, что формат правильный. Покажите пример того, что представляет собой фактический вход. Также немного опасно предположить, что день имеет ровно 24 часа; это не всегда так (думаю, например, летнее время). – JJJ

ответ

0

Благодарности @Pointy & @Rodrigo, вы, ребята, и привели меня к этой проблеме. Я знал, что месяцы начались с нуля, но я неправильно написал начальный скрипт и вычитал день из ** дня, а не из месяца **. Должно быть:

from = jQuery("#from").val().split("-"); 
start = new Date(from[2], from[0] - 1, from[1]); 
to = jQuery("#to").val().split("-"); 
ends = new Date(to[2], to[0] - 1, to[1]); 

Спасибо за помощь!

Смежные вопросы