2013-07-16 1 views
0

Я пытаюсь получить обратный отсчет, чтобы закончить понедельник @ полночь PST. Я думал, что работаю неделю назад, но, видимо, нет.Установить обратный отсчет JavaScript для завершения в полночь PST?

Я использую date.js

var monday = Date.today().next().monday(); 
var UTCmonday = new Date(monday.getTime() + monday.getTimezoneOffset() * 60000); 
var PSTmonday = new Date(UTCmonday.setHours(UTCmonday.getHours() + 9)); 
$('#defaultCountdown').countdown({until: UTCmonday}); 

Я думаю, что проблема заключается в определении времени UTC? Я прав? Как мне это решить?

+0

Вам нужно использовать время локального компьютера? Это может быть более точной и простой для вас - если вы можете использовать сервис общественного времени, который, вероятно, может дать вам время в UTC. Вы делаете запрос GET службе, и ответ json, скорее всего, содержит строку даты javascript. – Ringo

+0

PST означает тихоокеанское стандартное время? – Dancrumb

ответ

1

Предполагая, что вы тихоокеанское стандартное время, то вы должны помнить, что PST === UTC-8

Таким образом, ваша третья линия будет

var PSTmonday = new Date(UTCmonday.setHours(UTCmonday.getHours() - 8)); 

Проблема в том, что это не получится если UTC не ранее 8 утра, так как вы не можете передать отрицательное число в setHours.

Поскольку вы используете Datejs, почему бы не использовать его полные возможности для изменения часового пояса?

http://code.google.com/p/datejs/wiki/APIDocumentation#setTimezone

0

Получение времени строго в PST не имеет особого смысла, так как почти половина года PST не наблюдается в часовом поясе Тихого океана. PST (UTC-8) наблюдается зимой, а летом - PDT (UTC-7). Вы не можете представлять Pacific Time как фиксированное смещение, и если это не будет вашим собственным местным часовым поясом, вы не можете легко определить переход между ними без базы данных часового пояса. См. the timezone tag wiki.

Также date.js has been abandoned. Я не могу рекомендовать какое-либо решение, которое продолжает его использовать. Поддержка метода setTimezone, предложенного Dancrumb, является специфической для культуры, и она по-прежнему не учитывает летнее время.

Вместо этого, я рекомендую попробовать moment.js. Вы можете использовать дополнение moment-timezone для работы с зоной America/Los_Angeles, что является хорошим примером американского тихоокеанского времени. Убедитесь, что файл moment-timezone-data.js содержит по крайней мере эту зону. После этого вы можете сделать следующее:

var m = moment().tz('America/Los_Angeles').day(7).startOf('day'); 

var s = m.toISOString(); // if you need a string output representing UTC 
var dt = m.toDate();  // if you need an actual JavaScript Date object 

Давайте разберем, что вниз немного.:

  • moment() получает текущее время
  • tz('America/Los_Angeles') регулирует время в часовом поясе вы заинтересованы в
  • day(7) продвигается до следующий Понедельник.
  • startOf('day') Захватывает время до полуночи.

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

  • Нет связанных вопросов^_^