?
Библиотека PHP для преобразования даты в несколько календарей
Предпочтительным способом установки этого расширения является композитор.
Либо беги
composer require --prefer-dist meysampg/intldate " * "или добавить
"meysampg/intldate" : " * " в раздел «Требовать» вашего файла composer.json .
Также легко скачать и использовать его.
Как только библиотека установлена, просто используйте ее в своем файле PHP:
use meysampg intldate IntlDateTrait ;и используйте его на желаемом классе:
<?php
namespace foo bar ;
use meysampg intldate IntlDateTrait ;
class Bar
{
use IntlDateTrait;
// Some codes are here!
echo $ this -> fromGregorian ([ 2017 , 9 , 7 , 12 , 23 , 45 ])-> toPersian ( ' en ' )-> asDateTime ();
} IntlDateTrait имеет простую логику для методов именования: «Дата начинается с происхождения и заканчивается в конечном счете . Таким образом, все методы (сеттеры и Getters), которые связаны с входящей датой, названы setOriginXXXX и getOriginXXXX (что XXXX показывает функцию времени, например, Timezone или Locale ), а все методы, соответствующие дате Ontere, обращены getFinalXXXX setFinalXXXX . Доступные методы можно найти внизу этого документа.
Сначала я должен отметить, что входящая дата должна быть массивом в этой форме:
[
year, // 2016
month, // 2
day, // 23
hour, // 12
minute, // 23
second // 4
] В настоящее время библиотека не может проанализировать строку как время (см. Раздел TODO), поэтому, прежде чем преобразовать дату, вы должны проанализировать ее по приемлемому массиву (это можно сделать с помощью preg_match или каждых инструментов, которые вы знаете). Теперь вы можете легко использовать IntlDateTrait::from($datetimeArray, $locale, $calendar) для импорта входящей даты и IntlDateTrait::to($locale, $calendar) для преобразования в другую систему. Мы сообщили о $datetimeArray в первом из этого раздела, это наша дата для преобразования в принятом формате. $locale - это региональная информация языка. Например, для англичан это en , для фарси, это fa , для испанского, это es и так далее. Вы можете найти полный список их по этой ссылке. И, наконец, календарь - ваша желаемая система дат. В этой библиотеке используется семейство php Intl* , и вы можете использовать все поддерживаемые календарь в проекте ICU . Теперь эти календари поддерживаются:
Лучше использовать их обработчик в коде вместо использования прямого имени. Эти обработчики:
// Use them in `self::$CAL_CALENDAR, for example `$calendar = self::$CAL_HEBREW`.
$ CAL_PERSIAN
$ CAL_JAPANESE
$ CAL_BUDDHIST
$ CAL_CHINESE
$ CAL_INDIAN
$ CAL_ISLAMIC
$ CAL_HEBREW
$ CAL_COPTIC
$ CAL_ETHIOPIC
$ CAL_GREGORIAN Есть некоторые сокращения для конвертации дат безболезненным образом (да! Со всем моим гордым, я ленивый человек: D). Эти сокращения отформатируются как fromYyyy() для функции входящей даты и toZzzz() для функции исходящей даты, так что Yyyy и Zzzz являются названием календарей. Для входящей функции подпись fromYyyy($datetimeArray, $locale = 'en_US', $timezone = 'UTC) , а для общиния toZzzz($locale = 'fa', $timezone = 'UTC') . Используйте $locale в входящей функции, если у вас есть нелатиновые цифры и используйте их на исходящей функции, если вы хотите показать конвертированную дату латинскими цифрами (на основе области календаря, $locales определяется, например, местоположение Persian календаря для исходящей функции- fa ). Кроме того, с изменением $timezone в функциях fromYyyy и ToZzzz , вы можете преобразовать DateTime из одного в другое. Шорты перечислены в таблице.
| Вход | Исходящий |
|---|---|
| отперсиан | Topersian |
| от джапонского | Тоджапонский |
| от буддистского | тобуддийский |
| от кишечника | Тохинский |
| от индейца | Toindian |
| от исламского | Toislamic |
| От -подкора | Tohebrew |
| откуптический | Токоптик |
| отэтиопический | TOTHIOPIC |
| отгребл | Тоггорийский |
Есть две функции для отображения конвертированных дат. Первый - это asDateTime , а последний - asTimestamp .
Подпись asDateTime - это asDateTime($pattern = 'yyyy/MM/dd, HH:mm:ss') . Эта функция принимает формат ICU . Вы можете найти больше информации по этой ссылке. Кроме того, это хорошая идея для реализации функции, которая разрабатывает традиционный формат date PHP (см. Раздел TODO).
Функция asTimestamp возвращает эпоху UNIX, положительное целое число для времени после этого и отрицательное целое число для этого.
Есть несколько примеров для использования IntlDateTrait . Я думаю, что они необходимы и достаточно.
$ this -> fromTimestamp ( 1504770825 )-> toPersian ( ' en ' )-> asDateTime ();
// '1396/06/16, 07:53:45'
$ this -> fromGregorian ([ 2017 , 9 , 7 , 12 , 23 , 45 ])-> toPersian ( ' en ' )-> asDateTime ();
// '1396/06/16, 07:53:45'
$ this -> fromGregorian ([ 2017 , 9 , 7 , 12 , 23 , 45 ])-> toPersian ()-> asDateTime ();
// '۱۳۹۶/۰۶/۱۶, ۰۷:۵۳:۴۵'
$ this -> fromGregorian ([ 2017 , 9 , 7 , 12 , 23 , 45 ])-> toJapanese ()-> asDateTime ();
// '0029/09/07, 07:53:45'
$ this -> fromGregorian ([ 2017 , 9 , 7 , 12 , 23 , 45 ])-> toIslamic ()-> asDateTime ();
// '١٤٣٨/١٢/١٧, ٠٧:٥٣:٤٥'
$ this -> fromGregorian ([ 2017 , 9 , 7 , 12 , 23 , 45 ])-> toBuddhist ()-> asDateTime ();
// '2560/09/07, 07:53:45'
$ this -> fromGregorian ([ 2017 , 9 , 7 , 12 , 23 , 45 ])-> toChinese ()-> asDateTime ();
// '0034/07/17, 07:53:45'
$ this -> fromGregorian ([ 2017 , 9 , 7 , 12 , 23 , 45 ])-> toIndian ()-> asDateTime ();
// '1939/06/16, 07:53:45'
$ this -> fromGregorian ([ 2017 , 9 , 7 , 12 , 23 , 45 ])-> toHebrew ()-> asDateTime ();
// 'תשע״ז/י״ב/ט״ז, 07:53:45'
$ this -> fromGregorian ([ 2017 , 9 , 7 , 12 , 23 , 45 ])-> toCoptic ()-> asDateTime ();
// '1733/13/02, 07:53:45'
$ this -> fromGregorian ([ 2017 , 9 , 7 , 12 , 23 , 45 ])-> toEthiopic ()-> asDateTime ();
// '2009/13/02, 07:53:45'
$ this -> fromPersian ([ 1396 , 6 , 16 , 12 , 23 , 45 ])-> toIslamic ()-> asDateTime ();
// '١٤٣٨/١٢/١٧, ٠٧:٥٣:٤٥'
$ this -> fromPersian ([ 1396 , 6 , 16 , 12 , 23 , 45 ])-> toGregorian ()-> asDateTime ();
// '2017/09/07, 07:53:45'
$ this -> fromPersian ([ 1396 , 6 , 16 , 12 , 23 , 45 ])-> toGregorian ()-> setFinalTimeZone ( ' Asia/Tehran ' )-> asDateTime ();
// '2017/09/07, 12:23:45'
$ this -> fromPersian ([ 1396 , 6 , 16 , 12 , 23 , 45 ])-> toGregorian ()-> setFinalTimeZone ( ' Asia/Tehran ' )-> asDateTime ( ' yyyy ' );
// '2017'
$ this -> fromGregorian ([ 2017 , 9 , 7 , 12 , 23 , 45 ])-> asTimestamp ();
// '1504770825'
$ this -> fromPersian ([ 1396 , 6 , 16 , 12 , 23 , 45 ])-> asTimestamp ();
// '1504770825' Есть некоторые методы, которые помогают контролировать больше при преобразовании процесса. Я просто перечисляю их в этом разделе. Я думаю, что это имя жалуется на их использование, если это не так, пожалуйста, напишите документ для них: d.
| Сеттеры | Gettes |
|---|---|
setOriginDate($datetimeArray) | getFinalDate() |
setFromLocale($locale) | getFromLocale() |
setFromCalendar($calendar) | getFromCalendar() |
setToLocale($locale) | getToLocale() |
setToCalendar($calendar) | getToCalendar() |
getFromLocaleAndCalendar() | getToLocaleAndCalendar() |
setOriginTimeZone($timezone) | getOriginTimeZone() |
setFinalTimeZone($timezone) | getFinalTimeZone() |
setOriginCalendar($locale) | getOriginCalendar() |
setFinalCalendar($locale) | getFinalCalendar() |
setFinalDateType($datetype) | getFinalDateType() |
setFinalTimeType($timetype) | getFinalTimeType() |
setFinalCalendarType($calendarType) | getFinalCalendarType() |
setFinalPattern($pattern) | getFinalPattern() |
setIntlDateFormatter($locale = "en_US", $datetype = IntlDateFormatter::FULL, $timetype = IntlDateFormatter::FULL, $timezone = 'UTC', $calendar = IntlDateFormatter::GREGORIAN, $pattern = 'yyyy/MM/dd HH:mm:ss') | getIntlDateFormatter() |
setIntlCalendar($timezone = 'Asia/Tehran', $locale = 'fa_IR@calendar=persian') | getIntlCalendar() |
parsePattern($pattern) . /**
* Implement a function to parse both ICU patterns and php date
* function patterns and return a pattern that is compatible on
* ICU format. The php pattern must start with php keyword, for
* example `php:Y-F-d, H:i:s` is a php pattern.
*/ Реализовать метод guessDateTime($timestring) .
Напишите тесты!
Просто расколоть этот репозиторий, сделайте свою модификацию или дополнение и отправьте запрос на вытяжение!