В PHP я использую DateTimeZone::listIdentifiers()
чтобы получить список часовых поясов для выбора пользователя. Кажется, что это работает нормально, но в этом списке отсутствует полчаса.
В частности, Ньюфаундленд, Иран и Индия. Кто-нибудь знает, как вернуть их, почему они отсутствуют? Документы PHP показывают, что они «не используют эти часовые пояса», но они все еще используются в мире, и они, похоже, не перечислены в «действительном» списке где-либо здесь.
Есть идеи?
Например:
Идентификатор часового пояса Ньюфаундленда – America/St_Johns
[1] http://php.net/manual/en/timezones.america.php
[2] https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
Просто угадайте здесь, но он выглядит как по умолчанию $what
параметр DateTimeZone::ALL
, и вы хотите использовать идентификаторы, которые существуют только для обратной совместимости, поэтому вы должны использовать DateTimeZone::ALL_WITH_BC
:
print_r(DateTimeZone::listIdentifiers(DateTimeZone::ALL_WITH_BC));
Обратите внимание, что руководство действительно не использует их.
Например, в случае Ирана вы можете заменить его на часовой пояс Азия / Тегеран.
Кажется, я пропустил несколько полчасовых часовых поясов при сканировании списка 420 или около того. Конечным результатом этого является то, что да, есть часы. В списке IANA они все изменили свое историческое название.
Кажется, есть тонкое различие в том, как IANA означало привязанные тайм-зоны, которые будут использоваться, и как PHP реализовал это точно, что сейчас находится в сфере «определенно не ошибка, но ясность, как грязь в документах», и у нее есть своего рода решение.
https://bugs.php.net/bug.php?id=66102
Этот поиск Github сделал его еще более ясным: https://github.com/eggert/tz/search?utf8=%E2%9C%93&q=Newfoundland
Итак, они есть. У меня все еще есть некоторые сомнения по поводу удобства использования и будут ли наши пользователи понимать, что выбрать Америку / St_Johns и т. Д., Когда они ищут свои часовые пояса. Мы делаем некоторые исследования с нашими пользователями об этом.