-
ห้องสมุด PHP สำหรับการแปลงวันที่เป็นหลายปฏิทิน
วิธีที่ต้องการในการติดตั้งส่วนขยายนี้คือผ่านนักแต่งเพลง
วิ่งอย่างใดอย่างหนึ่ง
composer require --prefer-dist meysampg/intldate " * "หรือเพิ่ม
"meysampg/intldate" : " * " ไปยังส่วนที่ต้องการของไฟล์ composer.json ของคุณ 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 มีตรรกะง่ายๆสำหรับวิธีการตั้งชื่อ: "วันที่เริ่มต้นจาก จุดเริ่มต้น setFinalXXXX XXXX สู่ รอบชิง getFinalXXXX เลิศ ดังนั้นวิธีการทั้งหมด (setters และ getters) ที่เกี่ยวข้องกับวันที่ ที่ เข้ามาตั้งชื่อโดย setOriginXXXX และ getOriginXXXX รายการวิธีการที่มีอยู่สามารถหาได้ที่ด้านล่างของเอกสารนี้
ตอนแรกฉันต้องทราบว่าวันที่เข้ามาต้องเป็นอาร์เรย์ในแบบฟอร์มนี้:
[
year, // 2016
month, // 2
day, // 23
hour, // 12
minute, // 23
second // 4
] ปัจจุบันห้องสมุด ไม่สามารถ แยกสตริงเป็นเวลา (ดูส่วนสิ่งที่ต้องทำ) ดังนั้นก่อนที่จะแปลงวันที่คุณ ต้อง แยกมันลงในอาร์เรย์ที่ยอมรับได้ (สามารถทำได้ด้วย preg_match หรือเครื่องมือแต่ละอย่างที่คุณรู้) ตอนนี้คุณสามารถใช้ IntlDateTrait::from($datetimeArray, $locale, $calendar) สำหรับการนำเข้าวันที่เข้ามาและ IntlDateTrait::to($locale, $calendar) สำหรับการแปลงเป็นระบบอื่น เราไม่เห็นด้วยกับ $datetimeArray ในส่วนแรกของส่วนนี้มันเป็นวันที่ของเราสำหรับการแปลงในรูปแบบที่ยอมรับ $locale เป็นข้อมูลระดับภูมิภาคของภาษา ตัวอย่างเช่นสำหรับ ภาษาอังกฤษ มัน en สำหรับ Farsi มันคือ 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 จากที่หนึ่งไปอีกที่หนึ่ง ชวเลขอยู่ในตาราง
| การเข้ามา | ขาออก |
|---|---|
| Frompersian | ชาวท็อปเกอร์เชียน |
| จากภาษาญี่ปุ่น | ชาวยยาปา |
| จาก Buddhist | ยาสูบ |
| จากคน | โทเคิล |
| จากอินเดียน | Toindian |
| จากศาสนา | เกี่ยวกับ Toislamic |
| จากการเลี้ยงดู | Tohebrew |
| จากคอปติก | เกี่ยวกับโทกปติก |
| จากทางธรณีวิทยา | เกี่ยวกับความเป็นไปได้ |
| จาก Gregorian | Togregorian |
มีสองฟังก์ชั่นสำหรับการแสดงวันที่แปลง อย่างแรกคือ asDateTime และอันสุดท้ายคือ asTimestamp
ลายเซ็นของ asDateTime คือ asDateTime($pattern = 'yyyy/MM/dd, HH:mm:ss') ฟังก์ชั่นนี้ยอมรับรูปแบบ ICU -ยอมรับได้ คุณสามารถค้นหาข้อมูลเพิ่มเติมจากลิงค์นี้ นอกจากนี้ยังเป็นความคิดที่ดีสำหรับการใช้ฟังก์ชั่นที่แยกวิเคราะห์ date PHP แบบดั้งเดิม -รูปแบบที่ยอมรับได้ (ดูส่วนสิ่งที่ต้องทำ)
ฟังก์ชั่น asTimestamp ส่งคืน UNIX Epoch ซึ่งเป็นจำนวนเต็มบวกสำหรับเวลาหลังจากนั้นและจำนวนเต็มลบสำหรับก่อนหน้านั้น
มีตัวอย่างบางส่วนสำหรับการใช้ 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)
เขียนทดสอบ!
เพียงแค่แยกที่เก็บนี้ทำการดัดแปลงหรือเพิ่มของคุณและส่งคำขอดึง!