Добавить время для объекта Date в JavaScript - PullRequest
3 голосов
/ 08 апреля 2010

Я пытаюсь добавить время к объекту Date в javascript, но не получаю ожидаемых результатов.Я пытаюсь вытащить таймер со страницы и добавить его к текущему времени, чтобы получить значение метки времени Unix, когда таймер достигнет нуля.Время на странице отображается как «ЧЧ: ММ: СС».Вот что у меня есть:

time=getTimerText.split(":");
seconds=(time[0]*3600+time[1]*60+time[2])*1000;

для преобразования времени в миллисекунды.

fDate=new Date();
fDate.setTime(fDate.getTime()+seconds);

добавление миллисекунд к метке времени javascript

alert(Math.round(fDate.getTime() / 1000));

преобразование javascripttimestamp to unix timestamp

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

Ответы [ 2 ]

1 голос
/ 08 апреля 2010

Я только что проверил ваш расчет с аналогичным, разделив строку перед вычислением.Я думаю, что вижу проблему - попробуйте преобразовать time[2] в число:

seconds=(time[0]*3600+time[1]*60+(+time[2]))*1000;

(+time[2]) использует унарный оператор + для преобразования типа строки в тип числа.

0 голосов
/ 27 марта 2013

Вам не хватает того факта, что если вы добавите 12 часов в день, когда вступит в силу переход на летнее время, у вас будет час (или два, если это будет настолько большое смещение).

Пример:

  1. Начните с этой строки: "31/03/2013 12:00:00"
  2. преобразовать строку даты в объект даты: fDate = 31/03/2013 00:00:00 GMT + 1
  3. добавить 12 часов, 0 минут к fDate: fDate = 31/03/2013 13: 00: 00 GMT + 2

Почему? Потому что в 02:00 (AM) 31 марта вы добавляете один час для перехода на летнее время (в Швеции), поэтому 12 часов после полуночи 31 марта - это 13:00 (13:00).

Вот код, который будет компенсировать изменения часового пояса до и после добавления вашего времени:

fDate.setTime(fDate.getTime() - fDate.getTimezoneOffset() * 60000);
fDate.setTime(fDate.getTime() + seconds);
fDate.setTime(fDate.getTime() + fDate.getTimezoneOffset() * 60000);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...