?
Bibliothèque PHP pour convertir la date en plusieurs calendriers
La façon préférée d'installer cette extension est via le compositeur.
Soit courir
composer require --prefer-dist meysampg/intldate " * "ou ajouter
"meysampg/intldate" : " * " à la section requise de votre fichier composer.json .
Vous pouvez également facilement le télécharger et l'utiliser.
Une fois la bibliothèque installée, utilisez-le simplement dans votre fichier PHP:
use meysampg intldate IntlDateTrait ;Et utilisez-le sur votre classe souhaitée:
<?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 a une logique simple pour les méthodes de dénomination: "Une date commence de l'origine et des extrémités à la finale . Ainsi, toutes les méthodes (setters et getters) qui sont liées à la date entrante sont nommées par setOriginXXXX et getOriginXXXX (que XXXX affiche une fonctionnalité du temps, comme SetFinal ou Locale ) et toutes les méthodes qui correspondent à une date de sortie sont considérées comme setFinalXXXX getFinalXXXX . La liste des méthodes disponibles peut être trouvée en bas de ce document.
Au début, je dois noter que la date entrante doit être un tableau sous cette forme:
[
year, // 2016
month, // 2
day, // 23
hour, // 12
minute, // 23
second // 4
] Actuellement, la bibliothèque ne peut pas analyser une chaîne comme le temps (voir la section TODO), donc avant de convertir une date, vous devez l'analyser sur un tableau acceptable (cela peut être fait avec preg_match ou chaque outils que vous connaissez). Vous pouvez désormais utiliser facilement IntlDateTrait::from($datetimeArray, $locale, $calendar) pour importer une date entrante et IntlDateTrait::to($locale, $calendar) pour le convertir en un autre système. Nous avons décrit environ $datetimeArray Dans la première de cette section, c'est notre date de conversion sur un format accepté. $locale sont les informations régionales d'une langue. Par exemple pour l' anglais , c'est en , pour le tarsi c'est fa , pour l'espagnol c'est es et ainsi de suite. Vous pouvez en trouver une liste complète sur ce lien. Et enfin le calendrier est le système de dattes souhaité. Cette bibliothèque utilise la famille Intl* de php et vous pouvez donc utiliser tous les calendrier pris en charge dans le projet ICU . Maintenant, ces calendriers sont pris en charge:
Il est préférable d'utiliser leur gestionnaire dans le code au lieu d'utiliser le nom direct. Ces gestionnaires sont:
// 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 Il y a quelques sténographies pour convertir les dates d'une manière indolore (ouais! Avec tous mes fiers, je suis un homme paresseux : D). Ces raccourcis sont formatés comme fromYyyy() pour la fonction de date entrante et toZzzz() pour la fonction de date sortante telle que, Yyyy et Zzzz sont le nom des calendriers. Pour la fonction entrante, la signature est fromYyyy($datetimeArray, $locale = 'en_US', $timezone = 'UTC) et pour le sortant est toZzzz($locale = 'fa', $timezone = 'UTC') . Utilisez $locale dans la fonction entrante si vous avez des chiffres non latins et utilisez-le sur la fonction sortante, si vous voulez afficher la date convertie par des chiffres latins (en fonction de la région du calendrier, $locales sont définis, par exemple la localisation par défaut du calendrier Persian pour la fonction sortante est fa ). De plus, en changeant $timezone dans les fonctions fromYyyy et ToZzzz , vous pouvez convertir une datetime de l'un à l'autre. Les sténages sont répertoriés dans le tableau.
| Entrant | Sortant |
|---|---|
| à partir de personnes | topersien |
| de japonais | tojapanais |
| Buddhiste | tobuddhiste |
| de chinois | tochinois |
| From Indien | Toinien |
| fromislamique | toislamique |
| à partir de hebrew | therebrew |
| fraternel | tocoptique |
| de la fiche | toethiopic |
| fromgrégorien | togegorien |
Il existe deux fonctions pour montrer les dates converties. Le premier est asDateTime et le dernier est asTimestamp .
La signature d' asDateTime est asDateTime($pattern = 'yyyy/MM/dd, HH:mm:ss') . Cette fonction accepte un format acceptable ICU . Vous pouvez trouver plus d'informations à partir de ce lien. C'est également une bonne idée de mettre en œuvre une fonction qui analyse le format d'acceptation date PHP traditionnelle (voir la section TODO).
La fonction asTimestamp renvoie l'époque Unix, entier positif pour le temps après cela et entier négatif pour avant cela.
Il existe quelques exemples pour utiliser IntlDateTrait . Je pense qu'ils sont nécessaires et suffisants.
$ 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' Il existe certaines méthodes qui aident à contrôler davantage le processus de conversion. Je les énumère simplement dans cette section. Je pense que son nom se plaigne de leurs usages, si ce n'est pas le cas, veuillez écrire un document pour eux: D.
| Seigneurs | 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.
*/ Implémentez la méthode guessDateTime($timestring) .
Écrivez des tests!
Frais simplement ce référentiel, effectuez votre modification ou votre ajout et envoyez une demande de traction!