Проблема часового пояса с плагином jQuery.timeago - PullRequest
4 голосов
/ 31 мая 2011

Я использую плагин timeago jQuery для своего блога, но, похоже, проблема с самим временем, и я не могу понять, в чем причина проблемы.

В настоящее время это 31 мая., 2011 02:30 по местному времени здесь (GMT + DST).Вот пример даты, которую я использовал: 31 мая 2011 года 02:01.Следующим тегом для этого будет

<abbr class="timeago" title="2011-05-31T02:01:44+00:00">May 31st, 2011</abbr>

Тем не менее, jQuery выводит, что дата «32 минуты спустя», по какой-то причине на час впереди.

Кто-нибудь знает, что я »я здесь не так делаю?

Ответы [ 2 ]

10 голосов
/ 31 мая 2011

Опасность угадать, поэтому я могу ошибаться.

Проблема в том, что заданный вами временной интервал имеет смещение 0, поэтому оно такое же, как UTC- но это не то же самое, что и ваше время, когда следующий DST в часовом поясе GMT ​​.

GMT совпадает с UTC, т.е. смещение составляет 0.Тем не менее, вы упоминаете летнее время, и когда вы переходите на летнее время, ваши часы перемещаются на 1 час вперед, также как и ваше смещение UTC.Таким образом, ваше время сейчас относительно UTC на самом деле UTC + 0100.Вот откуда наступает дополнительный час.

Это может помочь сначала преобразовать все время в UTC, в конце концов, для этого он и нужен, верно?02:30 GMT при следующем DST 01:30 UTC.Таким образом, по сравнению с этим, отметка времени теста 02:01 UTC в будущем займет около получаса - следовательно, 32 minutes from now.

Если вы ожидаете увидеть вместо этого 30 minutes ago, ваша дата тестирования должна иметьбыл 2011-05-31T01:01:44+00:00 для того, чтобы выразить метку времени UTC, которая была эквивалентна времени 02:01 на дисплее часов .


Самое безопасное решение - использовать метки времени UTCвсегда - это то, как ТАК, Facebook и Twitter датируют свои сообщения.В этом случае метка времени UTC может быть однозначно интерпретирована и отформатирована для часового пояса каждого пользователя.

В таком случае ваша задача будет убедиться, что используемая вами метка времени - это не просто то, что вы видите на циферблате, а эквивалент UTCо нем - в вашем текущем часовом поясе время UTC может быть на 1 час меньше отображаемого времени.И в зависимости от того, что вы используете для генерации вашего HTML, вы сможете найти функцию, встроенную в язык / платформу или стороннюю библиотеку, которая даст вам UTC-эквивалент текущего времени, отображаемого наваши часы в вашем часовом поясе с учетом летнего времени.

0 голосов
/ 01 июня 2011

В настоящее время 31 мая 2011 года 02:30 по местному времени здесь (GMT + DST).

Вы не говорите, что такое летнее время, я буду считать, что это + 1 ч, то же самое, что no.good.at.coding выше

Теперь пример даты IЯ использовал это ... 31 мая 2011 года 02:01.Следующий тег для этого будет

2011-05-31T02: 01: 44 + 00: 00

Вы находитесь на 02: 30 , что 01:30 UTC .Ваша дата от 02: 01 UTC , что составляет 03: 01 вашего времени, которое в будущем составит полчаса.

Как и рекомендуется, вы должны сохранить вседаты как UTC в любом случае.Например, в Python есть метод datetime.utcnow ().Всегда сохраняйте как UTC, затем при отображении переходите на местный часовой пояс.

...