2009-04-23 3 views
0

У меня есть часть сценария, который вычисляет дни оставшихся на событие:Javascript Unix Epoch Time Странность

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 Epoch и сбривает миллисекунду. Вторая строка получает дату будущего события из XML-фида. Если я поместил оба раза в калькулятор Epoch онлайн, я получаю правильную дату для currTime и dispDate. Но когда я делю их до дней (третья строка), конечный результат отключается более чем на 30 дней, и я должен использовать последнюю строку для получения правильного количества дней.

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

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

+4

http://xkcd.com/376/ :) – Macke

ответ

1

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

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

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

+0

Я сбросил и проверил оба значения много раз, и они всегда правильные. Например, вот дата из предстоящего события, которое я только что вытащил из XML-канала: 1243270800, который является GMT: Пн, 25 мая 2009 г. 17:00:00 GMT, что является правильным. –

+0

и что он выводит, если вы запрашиваете currTime? Вы знаете, что это апрель, да? ;-) – Alnitak

+2

Если я C & P javascript: alert (Math.round (('1243270800' - Math.round (новая дата(). GetTime()/1000.0))/86400)) в моей панели браузера Я получаю 32 – Alnitak

0

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

+0

Он создается Perl. –

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