PHP strtotime и DST

У меня есть приложение, где пользователи вводят время / даты, которые затем преобразуются через strtotime () в метки времени Unix (пользователи устанавливают свои собственные часовые пояса). Обычно это работает довольно хорошо; strtotime () даже удается преобразовать время, такое как 2:15 AM, 9 марта 2014 г., в метку времени (которая соответствует метке времени, которая будет возвращена, если пользователь введет «3:15 AM March 9, 2014»).

Однако, скажем, пользователь хочет ввести время утром 2 ноября 2014 года, в частности, между 2:00 и 3:00. Есть ли элемент, к которому пользователи могут добавить, чтобы указать который время будет использовано?

Например, если пользователь передает ‘2:15 AM November 2, 2014’ через strtotime (), результатом будет отметка времени UNIX, соответствующая «второму» 2:15 на эту дату.

Как можно указать «первое» 2:15?

0

Решение

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

Например, скажем, вы работаете с восточным часовым поясом США ("America/New_York")Вы можете включить смещение, как это:

strtotime('2:15 AM November 2, 2014 -0400')  // 1414908900
strtotime('2:15 AM November 2, 2014 -0500')  // 1414912500

Или сокращением:

strtotime('2:15 AM November 2, 2014 EDT')  // 1414908900
strtotime('2:15 AM November 2, 2014 EST')  // 1414912500

Теперь причина, по которой я сказал «обычно» потому что часовые пояса могут быть неоднозначными. проверка Википедия список сокращений часовых поясов, Есть 2 разных интерпретации «EST». Некоторые из них намного хуже, например, 5 различных интерпретаций «CST». В общем, не стоит полагаться на сокращения часовых поясов для вход. Придерживайтесь смещений, и все будет в порядке.

Конечно, вам все еще нужно знать, какие смещения применимы к каким часовым поясам. В PHP вы можете использовать timezone_offset_get за это.

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]