У меня есть приложение, где пользователи вводят время / даты, которые затем преобразуются через 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?
Вы можете включить смещение или сокращение часового пояса вместе со строкой для разбора, и это будет обычно выберите правильную метку времени.
Например, скажем, вы работаете с восточным часовым поясом США ("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
за это.
Вы также можете быть заинтересованы в этот вопрос, и это ответ, что может помочь вам определить, является ли ваше время ввода неверным или неоднозначным. Затем вы можете соответствующим образом предложить пользователю и (в неоднозначном случае) попросить его выбрать одно из двух возможных смещений.
Других решений пока нет …