Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Получить количество дней при вычитании дат (https://javascript.ru/forum/events/12522-poluchit-kolichestvo-dnejj-pri-vychitanii-dat.html)

Spinne 21.10.2010 15:41

Получить количество дней при вычитании дат
 
Здравствуйте, господа. Такой вопрос: есть две даты, нужно узнать количество полных дней между этими датами.
делалось это так:
var diff = Math.floor((endingDate.getTime() - beginingDate.getTime()) / 24 / 60 / 60 / 1000);

Все бы хорошо, но при этом не учитывается переход на зимнее/летнее время. То есть если от даты 02.11.2010 00:00:00 отнимать 30.10.2010 00:00:00, то получим 3 дня и 1 час.
Как с этим бороться ?

subzey 21.10.2010 16:56

Я думаю, нужно отменить летнее время.

Kolyaj 21.10.2010 17:08

Один уже отменил, чем ещё больше усугубил положение с вычислением дат.

vflash 21.10.2010 17:24

subzey, +1 .

для летнего/зимнего времени нужна таблица переходов временной зоны.
другой вариант отказаться в расчетах от летнего времени.

Gvozd 21.10.2010 17:27

Цитата:

Сообщение от Spinne
Как с этим бороться ?

округляйте до целых дней

vflash 21.10.2010 17:31

для полноты картины даты (02.11.2010 00:00:00) должны быть со смешением (+NNN) , тогда можно будет вычислить

e1f 21.10.2010 18:25

А в чем проблема? Проходит ровно 3 часа:
alert( new Date(new Date('11/02/2010 00:00:00').getTime() - new Date('10/30/2010 00:00:00').getTime()) )
// Sun Jan 04 1970 03:00:00 GMT+0200

subzey 22.10.2010 00:54

Kolyaj,
Вы про Владимира Ильича Ульянова/Ленина и декретное время?

Я предлагаю собраться форумом и отменить в СНГ (хотя бы) переход на летнее время. Я думаю, у нас получится! ^.^

Kolyaj 22.10.2010 09:23

subzey,
нет, я про другого Владимира -- Владимировича. Я перепутал с временными поясами.

Spinne 22.10.2010 09:34

Цитата:

Сообщение от vflash (Сообщение 75264)
subzey, +1 .

для летнего/зимнего времени нужна таблица переходов временной зоны.
другой вариант отказаться в расчетах от летнего времени.

Увы, отказаться от летнего времени никак нельзя. А можно набросать пример, как будем выглядеть расчет с такой таблицей ?

Цитата:

Сообщение от Gvozd (Сообщение 75266)
округляйте до целых дней

А я что делаю ?

Цитата:

Сообщение от e1f (Сообщение 75288)
А в чем проблема? Проходит ровно 3 часа:
alert( new Date(new Date('11/02/2010 00:00:00').getTime() - new Date('10/30/2010 00:00:00').getTime()) )
// Sun Jan 04 1970 03:00:00 GMT+0200

А при чем тут часы ?

vflash 22.10.2010 13:02

Spinne, какие исходные данные? и вопрос непонятен чего именно нужно ?

tenshi 22.10.2010 14:20

для каждой даты просто укажи часовое смещение соответствующее её сезону. для москвы это: gmt+0300 и gmt+0400

Spinne 22.10.2010 16:41

vflash,
Дано: Data1, Data2.
Найти: Data2 - Data1 = количество целых дней
В чем проблема:
02.11.2010 00:00:00 - 30.10.2010 00:10:00 = 3 дня и 50 минут.
Нужен алгоритм, который выдаст ответ 2 дня, 23 часа и 50 минут
Даты могут быть любыми, и количество переходов на зимнее/летнее время между датами тоже любое.

vflash 22.10.2010 17:27

Spinne по исходным данным - какой часовой пояс? москва, китай или локально по браузеру new Date.getTimezoneOffset() . приводите к timestamp с учетом временной зоны .

Spinne 22.10.2010 17:33

vflash,
часовой пояс Украина.

vladlen 24.10.2010 02:15

Да пофигу какая зона, если есть DST, то в случае расчетов с датами летнего и зимнего времени будет погрешность на час.

Spinne 28.10.2010 11:59

А у меня еще вопрос. А почему
var x = (Date.UTC(2010, 10, 31, 00, 00, 00) - Date.UTC(2010, 10, 28, 00, 00, 00)) /24/60/60/1000;
alert(x);

и
var x = (Date.UTC(2010, 11, 01, 00, 00, 00) - Date.UTC(2010, 10, 28, 00, 00, 00)) /24/60/60/1000;
alert(x);


возвращают одинаковое количество дней ?

vflash 28.10.2010 12:43

время UTC это точка отсчета . там нет летнего времени.
и еше Date.UTC(2010, 11, 01, 00, 00, 00) это декабрь "Wed Dec 01 2010 03:00:00 GMT+0300"

Spinne 28.10.2010 13:00

Господа, плиз, набросайте примерчик, как это должно нормально работать...


Часовой пояс GMT +3, время: 04:56.