؟
مكتبة 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 لها منطق بسيط لطرق التسمية: "يبدأ التاريخ من الأصل وينتهي إلى نهائي . لذا فإن جميع الطرق (المستقلين getFinalXXXX ) المرتبطة بالتاريخ الوارد تسمى setOriginXXXX و getOriginXXXX setFinalXXXX والتي تُظهر XXXX ميزة من الوقت ، مثل timzone أو locale ). من الأساليب المتاحة يمكن العثور عليها في أسفل هذا المستند.
في البداية يجب أن أشير إلى أن التاريخ الوارد يجب أن يكون صفيفًا في هذا النموذج:
[
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 وما إلى ذلك. يمكنك العثور على قائمة كاملة بها في هذا الرابط. وأخيرا التقويم هو نظام التاريخ المطلوب. تستخدم هذه المكتبة عائلة Intl* من php وبالتالي يمكنك استخدام جميع التقويم المدعوم في مشروع 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 من واحد إلى آخر. يتم سرد الاختزال في الجدول.
| وارد | المنتهية ولايته |
|---|---|
| من بيرسيان | تيرسيان |
| fromjapanese | توجابانية |
| FromBuddhist | توبوديست |
| الفرنسي | توتشيني |
| Fromindian | toindian |
| من الإسلامي | tislamic |
| من الحمل | توهبرو |
| FromCoptic | tocoptic |
| Fromethiopic | toethiopic |
| FromGregorian | توجيئة |
هناك وظيفتان لإظهار التواريخ المحولة. الأول هو 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' هناك بعض الطرق التي تساعد على التحكم أكثر في عملية التحويل. أنا فقط أدرجهم في هذا القسم. أعتقد أن اسمهم يشكون من استخداماتهم ، إذا لم يكن الأمر كذلك ، يرجى كتابة المستند لهم: د.
| المستودعات | 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) .
اكتب الاختبارات!
فقط مفترق هذا المستودع ، قم بالتعديل أو الإضافة وأرسل طلب سحب!