Nano Hash - криптовалюты, майнинг, программирование

Получить список календарей, часовых поясов, локалей в PHP ICU (intlDateFormatter)

Как я могу получить список поддерживаемых календарей, часовых поясов, локалей в PHP ICU (intlDateFormatter)?


  • Вы пробовали что-то? Пожалуйста, покажите нам некоторые части вашего кода. Спасибо 12.09.2015
  • @arman1991, я просто хочу получить список этих элементов, чтобы добавить функции локализации в мое веб-приложение, чтобы каждый пользователь мог видеть даты и время в своем предпочтительном календаре, языке и часовом поясе. Другими словами, я ищу функции, которые возвращают список календарей, таких как григорианский, персидский, иврит, буддийский, исламский и т. д., которые поддерживаются текущей установкой PHP ICU, а также функции для часовых поясов и локалей. 12.09.2015

Ответы:


1

Как использовать модуль PHP intl для создания массивов локалей, календарей и часовых поясов

Чтобы создать пакет ресурсов для всех локалей:

$bundle=new ResourceBundle('','ICUDATA');

Чтобы перечислить имена ресурсов в комплекте:

$rnames=[];
foreach($bundle as $n=>$v){$rnames[]=$n;}

который производит:

AuxExemplarCharacters
Ellipsis
ExemplarCharacters
ExemplarCharactersNumbers
ExemplarCharactersPunctuation
MoreInformation
NumberElements
Version
calendar
characterLabel
delimiters
fields
layout
listPattern
measurementSystemNames
parse

Чтобы получить массив всех локалей:

$locales=$bundle->getLocales('');

который производит:

af
af_NA
af_ZA
agq
agq_CM
ak
ak_GH
...
gv_IM
ha
ha_GH
ha_NE
ha_NG
haw
...
zh_Hant
zh_Hant_HK
zh_Hant_MO
zh_Hant_TW
zu
zu_ZA

Чтобы получить массив всех имен календарей:

$cnames=[];
$calendars=$bundle->get('calendar');
foreach($calendars as $n=>$v){$cnames[]=$n;}

который производит:

buddhist
chinese
coptic
dangi
default
ethiopic
ethiopic-amete-alem
generic
gregorian
hebrew
indian
islamic
islamic-civil
islamic-rgsa
islamic-tbla
islamic-umalqura
japanese
persian
roc

Чтобы получить список календарей для определенной локали, создайте пакет, например:

$bundle=new ResourceBundle('en','ICUDATA');

Чтобы перечислить все часовые пояса:

// CREATE TIMEZONE ITERATOR AND SET TO START
$zones=[];
$zone_iter=IntlTimeZone::createEnumeration(NULL);
$zone_iter->rewind();

// WHILE VALID TIMEZONE
while($zone_iter->valid()){
 // ADD TIMEZONE TO ARRAY
 $zones[]=$zone_iter->current();

 // NEXT TIMEZONE
 $zone_iter->next();
}

производить:

ACT
AET
AGT
ART
AST
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
...
Atlantic/South_Georgia
Atlantic/St_Helena
Atlantic/Stanley
Australia/ACT
Australia/Adelaide
Australia/Brisbane
...
US/Pacific
US/Pacific-New
US/Samoa
UTC
Universal
VST
W-SU
WET
Zulu

Чтобы получить список часовых поясов, которые не устарели, и начать со знакомых регионов, таких как «Азия», выполните цикл:

// WHILE VALID TIMEZONE
while($zone_iter->valid()){
 // IF NOT DEPRECATED AND STARTS WITH FAMILIAR REGION NAME
 $zone=$zone_iter->current();
 $tzone=intltz_create_time_zone($zone);
 $czone=$tzone->getCanonicalID($zone);
 if(($z==$cid)&&
    (preg_match('~^(Af|Am|An|As|At|Au|Eu|In|Pa|Etc/UTC)~',$z)===1)){
  // ADD TIMEZONE TO ARRAY
  $zones[]=$zone;
 }

 // NEXT TIMEZONE
 $zone_iter->next();
}

производить:

Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
...
Australia/Perth
Australia/Sydney
Etc/UTC
Europe/Amsterdam
Europe/Andorra
...
Pacific/Truk
Pacific/Wake
Pacific/Wallis

Обратите внимание, что оно включает каноническое имя для UTC как Etc/UTC.

Чтобы перечислить часовые пояса для конкретной страны, создайте итератор, например:

$zone_iter=IntlTimeZone::createEnumeration('AU');
07.08.2021

2

Список часовых поясов:

$all_time_zones = DateTimeZone::listIdentifiers(DateTimeZone::ALL); // 425 zones

См. также связанный вопрос, например. Создание раскрывающегося списка часовых поясов с помощью PHP.

Календарь — вы имеете в виду форматирование даты в зависимости от типа календаря и часового пояса — см. https://www.php.net/manual/en/intldateformatter.create.php и https://www.php.net/manual/en/intldateformatter.format.php:

// basic example
$formatter = IntlDateFormatter::create('en_US', IntlDateFormatter::FULL, IntlDateFormatter::FULL, 'Europe/Prague', IntlDateFormatter::GREGORIAN);
$calendar = IntlCalendar::createInstance('Europe/Prague');
$now_en = $formatter->format($calendar); // "Monday, August 26, 2019 at 12:01:47 PM Central European Summer Time"

// localized with date pattern
$formatter = IntlDateFormatter::create('cs_CS', IntlDateFormatter::FULL, IntlDateFormatter::FULL, 'Europe/Prague', IntlDateFormatter::GREGORIAN, 'dd.MM.yyyy, eeee, H:mm');
$calendar = IntlCalendar::createInstance('Europe/Prague');
$now_cs = $formatter->format($calendar); // "26.08.2019, pondělí, 14:30"

ICU (ver. 64.1) дамп свойств (600+): https://intl.rmcreative.ru/tables?locale=en

Форматы даты ICU: http://userguide.icu-project.org/formatparse/datetime

26.08.2019
  • Проголосовали против, потому что ни один из этих ответов не описывает, как СПИСОК (не форматировать) доступные календари, часовые пояса и локали, ИСПОЛЬЗУЯ модуль intl. 07.08.2021
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

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