Javascript Unix Эпоха Время Странность

У меня есть часть скрипта, которая вычисляет количество дней, оставшихся до события:

var currTime = Math.round(new Date().getTime() / 1000.0);
var dispDate = event.find('UnixEpoch').text();
var diffDate = (dispDate - currTime) / 86400;
var dateRound = Math.round(diffDate) - 30;

Первая строка получает текущее время эпохи Unix и сокращает миллисекунды. Вторая строка получает дату будущего события из XML-канала. Если я введу оба значения времени в онлайн-калькулятор эпохи, я получу правильную дату как для currTime, так и для dispDate. Но когда я делю их на дни (третья строка), конечный результат отличается более чем на 30 дней, и мне нужно использовать последнюю строку, чтобы получить правильное количество дней.

Это достаточно странно. Но происходит что-то еще, чего я не могу понять. Раньше он был отключен на 31 день, а теперь это неправильно, поэтому я изменил сценарий на 30 дней, что правильно.

Может ли кто-нибудь указать, что я делаю неправильно? Я не могу на всю жизнь понять, почему это происходит, и я бы предпочел не продолжать его настраивать.


person b. e. hollenbeck    schedule 23.04.2009    source источник


Ответы (2)


На первый взгляд код выглядит нормально.

Попробуйте вывести значения currTime и dispDate перед выполнением вычитания и посмотрите, согласуются ли они.

Ошибка, о которой вы сообщаете, предполагает, что где-то в месячной части кода ошибка не соответствует одной. В этом месяце 30 дней, а в прошлом месяце 31 день. Вероятное местонахождение ошибки находится внутри вызова event.find('UnixEpoch').

person Alnitak    schedule 23.04.2009
comment
Я сбрасывал и проверял оба значения много раз, и они всегда правильные. Например, вот дата предстоящего события, которую я только что вытащил из XML-канала: 1243270800, то есть по Гринвичу: понедельник, 25 мая 2009 г., 17:00:00 по Гринвичу, что верно. - person b. e. hollenbeck; 23.04.2009
comment
и что он выводит, если вы попросите currTime? Ты знаешь, что сейчас апрель, да? ;-) - person Alnitak; 23.04.2009
comment
Если я C&P javascript:alert(Math.round(('1243270800' - Math.round(new Date().getTime()/1000.0))/86400)) в строке браузера, я получаю 32 - person Alnitak; 23.04.2009
comment
Правильно — вы получите 32 вместо 2, что было бы правильным ответом. - person b. e. hollenbeck; 23.04.2009
comment
Я все еще жду... но я не могу ждать еще 30 дней... ;-) - person Alnitak; 24.04.2009
comment
Это была ошибка в скрипте Perl, который сгенерировал метку времени. Задача решена! - person b. e. hollenbeck; 28.04.2009

Обрабатывается ли дата события другим Javascript? Если вы используете формат new Date(year, month, day, etc...), месяц начинается с нуля, о чем легко забыть.

person Justin Love    schedule 23.04.2009