?
日付を複数のカレンダーに変換するためのPHPライブラリ
この拡張機能をインストールするための好ましい方法は、Composerを通じてです。
どちらか走ってください
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は、ネーミングメソッドの単純なロジックがあります。「日付は起源と終わりから最終的なものになります。したがって、着信日に関連するすべてのメソッド(セッターとゲッター)は、 setOriginXXXXとgetOriginXXXXによって命名getFinalXXXX setFinalXXXXます( XXXXはタイムゾーンやロカレのような時間の機能を示しています)。利用可能な方法のリストは、このドキュメントの底にあることができます。
最初は、着信日はこの形式の配列でなければならないことに注意する必要があります。
[
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 日付を痛みのない方法で変換するための速記がいくつかあります(ええ、私の誇りに思って、私は怠zyな男です:D)。この速記は、 YyyyとZzzzカレンダーの名前であるように、受信日関数の場合はfromYyyy()および発信日関数のtoZzzz()のようにフォーマットされます。着信機能の場合、署名はfromYyyy($datetimeArray, $locale = 'en_US', $timezone = 'UTC)から、発信はtoZzzz($locale = 'fa', $timezone = 'UTC')です。着信関数で$localeを使用して、ラチン以外の数字があり、発信機能でそれを使用する場合、変換された日付をラテン桁で表示したい場合(カレンダーの領域に基づいて、たとえば発信$localesのPersianカレンダーのデフォルトのロケートはfaです)。また、 fromYyyyとToZzzz両方の関数の両方で$timezone変更すると、DateTimeを1つから別のものに変換できます。速記は表にリストされています。
| 着信 | 発信 |
|---|---|
| Frompersian | トーパーティアン |
| 日本から | トリネーゼ |
| frombuddhist | tobuddhist |
| fromchinese | トキネーゼ |
| fromindian | トゥインディアン |
| fromislamic | トイスラム |
| fromhebrew | Tohebrew |
| fromcoptic | トコプティック |
| エチオピックから | toethiopic |
| グレゴリオから | トレゴリオ |
変換された日付を表示するには、2つの機能があります。 1つ目はasDateTimeで、最後の1つはasTimestampです。
asDateTimeの署名はasDateTime($pattern = 'yyyy/MM/dd, HH:mm:ss')です。この関数は、 ICU受容可能な形式を受け入れます。このリンクから詳細情報を見つけることができます。また、従来のPHP date容認できる形式を解析する関数を実装するための考え方です(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' 変換プロセスをより制御するのに役立ついくつかの方法があります。このセクションでそれらをリストするだけです。名前が使用されていない場合は、それらのためにドキュメントを書いてください。
| セッター | 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)メソッドを実装します。
テストを書く!
このリポジトリをフォークするだけで、変更または追加を行い、プルリクエストを送信してください!