Je suis papa maintenant depuis un an et demi et cela se voit clairement en étant à l'heure avec la fusion des PR ou en poussant ce paquet plus loin. Le temps est ici la plus grande contrainte. Je serais heureux de confier le projet à quelqu'un qui a plus de temps et de motivation pour faire avancer le projet. Envoyez-moi simplement un message. Acclamations!
_ _ _ __ ___ ___ _ __ ___ ___ _ __ | |_ _ __ | |__ _ __ | '_ ` _ / _ | '_ ` _ / _ '_ | __| | '_ | '_ | '_ | | | | | | (_) | | | | | | __/ | | | |_ _| |_) | | | | |_) | |_| |_| |_|___/|_| |_| |_|___|_| |_|__(_) .__/|_| |_| .__/ |_| |_|
Journal des modifications
Bibliothèque de dates pour analyser, manipuler et formater les dates avec i18n.
PHP 5.3 ou version ultérieure puisque moment.php est basé sur la classe DateTime de php.
Installation facile via composer. Vous ne savez toujours pas ce qu'est un compositeur ? Informez-vous ici.
composer require fightbulc/moment
$m = nouveau MomentMoment(); // la valeur par défaut est "maintenant" UTCecho $m->format(); // par exemple 2012-10-03T10:00:00+0000$m = new MomentMoment('now', 'Europe/Berlin');echo $m->format(); // par exemple 2012-10-03T12:00:00+0200$m = new MomentMoment('2017-06-06T10:00:00', 'Europe/Berlin');echo $m->format(); // par exemple 2012-10-03T12:00:00+0200$m = new MomentMoment(1499366585);echo $m->format(); // par exemple 2017-07-06T18:43:05+0000
Moment analyse les formats de date suivants en entrée :
const ATOM = 'Ym-dTH:i:sP'; // 2005-08-15T15:52:01+00:00const COOKIE = 'l, dMy H:i:s T'; // Lundi 15 août 2005 15:52:01 UTCconst ISO8601 = 'Ym-dTH:i:sO'; // 2005-08-15T15:52:01+0000const RFC822 = 'D, d M y H:i:s O'; // Lundi 15 août 2005 15:52:01 +0000const RFC850 = 'l, dMy H:i:s T'; // Lundi 15 août 2005 15:52:01 UTCconst RFC1036 = 'D, d M y H:i:s O'; // Lundi 15 août 2005 15:52:01 +0000const RFC1123 = 'D, d M Y H:i:s O'; // Lundi 15 août 2005 15:52:01 +0000const RFC2822 = 'D, d M Y H:i:s O'; // Lun, 15 août 2005 15:52:01 +0000const RSS = 'D, d M Y H:i:s O'; // Lundi 15 août 2005 15:52:01 +0000const W3C = 'Ym-dTH:i:sP'; // 2005-08-15T15:52:01+00:00// Moment essaie également d'analyser les dates sans fuseau horaire ou sans secondesconst NO_TZ_MYSQL = 'Ymd H:i:s'; // 2005-08-15 15:52:01const NO_TZ_NO_SECS = 'Ymd H:i'; // 15/08/2005 15:52const NO_TIME = 'Ymd'; // 2005-08-15// les fractions de temps ".000" seront automatiquement supprimées$timeWithFraction = '2016-05-04T10:00:00.000';
Jetez un œil au dossier Locales
pour voir toutes les langues prises en charge. Les paramètres régionaux par défaut sont en_GB
.
$m = new MomentMoment();echo $m->format('[Weekday:] l'); // par exemple Jour de la semaine : mercredi// définir la locale allemandeMomentMoment::setLocale('de_DE');$m = new MomentMoment();echo $m->format('[Wochentag:] l'); // par exemple Wochentag : Mittwoch
Langues prises en charge jusqu'à présent :
ar_TN
Arabe (Tunisie) ca_ES
Catalan cs_CZ
Tchèque da_DK
Danois de_DE
Allemand (Allemagne) en_CA
Anglais (Canada) en_GB
Anglais (britannique) en_US
Anglais (américain) eo_EO
Espéranto es_ES
Espagnol (Europe) fa_IR
Farsi fi_FI
Finnois fr_CA
Français (Canada) fr_FR
Français ( Europe) hu_HU
Hongrois id_ID
Indonésien it_IT
Italien ja_JP
Japonais kz_KZ
Kazakh lv_LV
Letton (Latviešu) nl_NL
Néerlandais oc_LNC
Lengadocien pl_PL
Polonais pt_BR
Portugais (Brésil) pt_PT
Portugais (Portugal) ru_RU
Russe (version de base) sv_SE
Suédois th_TH
Thaï tr_TR
Turc uk_UA
Ukrainien vi_VN
Vietnamien zh_CN
Chinois zh_TW
Chinois (traditionnel)
$m = new MomentMoment('2012-04-25T03:00:00', 'CET');echo $m->setTimezone('UTC')->format(); // 2012-04-25T01:00:00+0000
MomentMoment::setDefaultTimezone('CET');$m = new MomentMoment('2016-09-13T14:32:06');echo $m->format(); // 2016-09-13T14:32:06+0100
$m = new MomentMoment('2012-04-25T03:00:00', 'CET');echo $m->format('l, dS F Y / H:i (e)'); // Mercredi 25 avril 2012 / 03h00 (Europe/Berlin)
Les formats sont basés sur la fonction Date et la classe DateTime de PHP.
Vous pouvez désormais injecter une gestion de format différente en transmettant une classe qui implémente FormatsInterface
. Vous pouvez trouver un exemple dans le dossier test pour implémenter tous les formats de moment.js. Merci à Ashish d'avoir pris le temps de faire correspondre les formats moment.js
à ceux de PHP. Jetez un œil au script de test pour voir l’exemple en action.
Tout le monde peut écrire des classes de format de la même manière. C’est simple et évolutif.
// obtient la classe des formats souhaités// crée un moment$m = new MomentMoment('2012-04-25T03:00:00', 'CET');// format avec les définitions moment.jsecho $m->format('LLLL ', nouveau MomentCustomFormatsMomentJs()); // Mercredi 25 avril 2012 03h00
Custom formats
peuvent également faire partie de chaque Locale
. S'il n'existe pas encore pour vos paramètres régionaux, ajoutez-le. Voir un exemple pour la langue française.
Enveloppez simplement tout votre texte entre []
et tous les caractères seront automatiquement échappés pour vous.
$m = new MomentMoment('2012-04-25T03:00:00', 'CET');echo $m->format('[Nous sommes au mois de :] F'); // Nous sommes au mois de : Avril
Le calcul ordinal interne de PHP semble être bogué. J'ai ajouté une solution rapide pour gérer ce problème.
L'exemple suivant imprime la semaine de l'année de la date donnée. Il devrait imprimer 22nd
:
// fonction internedate('WS', mktime(12, 22, 0, 5, 27, 2014)); // 22// moment.php$m = new MomentMoment('2014-05-27T12:22:00', 'CET');$m->format('WS'); // 22
$m = new MomentMoment('2012-05-15T12:30:00', 'CET');echo $m->addHours(2)->format(); // 2012-05-15T14:30:00+0200$m = new MomentMoment('2012-05-15T12:30:00', 'CET');echo $m->subtractDays(7)->subtractMinutes(15 )->format(); // 2012-05-08T12:15:00+0200$m = nouveau MomentMoment('@1401443979', 'CET'); // unix timeecho $m->subtractDays(7)->subtractMinutes(15)->format(); // 2014-05-23T09:44:39+0000
Parfois, il est utile de prendre un moment donné et de travailler avec sans en changer l'origine. Pour cela, utilisez cloning()
.
$m = new MomentMoment('2012-05-15T12:30:00', 'CET');$c = $m->cloning()->addDays(1);echo $m->getDay(); // 15echo $c->getDay(); // 16
Alternativement, vous pouvez activer le mode immuable sur l'origine.
$m = new MomentMoment('2012-05-15T12:30:00', 'CET', true);$c = $m->addDays(1);echo $m->getDay(); // 15echo $c->getDay(); // 16// Vous pouvez également changer le mode immuable après la création :$m->setImmutableMode(false)->subtractDays(1);echo $m->getDay(); // 14
Le mode immuable oblige toutes les méthodes de modification à appeler implicitement cloning()
avant d'appliquer leurs modifications.
Ajouter | Soustraire |
---|---|
ajouter des secondes ($ s) | soustraireSecondes($s) |
ajouterMinutes($i) | soustraireMinutes($i) |
ajouter des heures ($ h) | soustraireHeures($h) |
ajouterJours($d) | soustraireJours($d) |
ajouter des semaines ($ w) | soustraireSemaines($w) |
ajouter des mois ($ millions) | soustraireMois($m) |
ajouter des années ($ y) | soustraireAnnées($y) |
Setter | Obtenir |
---|---|
setSecond($s) | obtenirSecond() |
setMinute($m) | getMinute() |
setHeure($h) | getHeure() |
setDay($d) | getDay() |
setMonth($m) | getMois() |
setAnnée($y) | getAnnée() |
-- | getQuarter() |
$m = new MomentMoment('2013-02-01T07:00:00');$momentFromVo = $m->fromNow();// ou à partir d'un moment spécifique$m = new MomentMoment('2013-02-01T07: 00:00');$momentFromVo = $m->from('2011-09-25T10:00:00');// le résultat est présenté sous la forme d'un objet de valeur classecho $momentFromVo->getDirection() // "futur"echo $momentFromVo->getSeconds() // -42411600echo $momentFromVo->getMinutes() // -706860echo $momentFromVo->getHours() // -11781echo $momentFromVo->getDays() // -490.88echo $momentFromVo->getWeeks() // -70.13echo $momentFromVo->getMonths() // -17.53echo $momentFromVo->getYears() // -1.42echo $momentFromVo->getRelative() // dans un an
Parfois, il est utile d'obtenir les limites de période d'une date donnée. Par exemple, si nous sommes aujourd'hui mercredi et que j'ai besoin des dates de début/fin de la semaine d'aujourd'hui. Les périodes autorisées sont week
, month
et quarter
.
$m = new MomentMoment('2013-10-23T10:00:00');$momentPeriodVo = $m->getPeriod('week');// les résultats sont livrés ainsi qu'un objet de valeur classecho $momentPeriodVo->getStartDate( ) ->format('Ymd'); // 2013-10-21echo $momentPeriodVo->getEndDate() ->format('Ymd'); // 2013-10-27echo $momentPeriodVo->getRefDate() ->format('Ymd'); // 2013-10-23echo $momentPeriodVo->getInterval(); // 43 = semaine de l'année
Même procédure pour les périodes mensuelles et trimestrielles :
$momentPeriodVo = $m->getPeriod('mois');$momentPeriodVo = $m->getPeriod('trimestre');
L'heure du calendrier affiche l'heure par rapport à now
, mais légèrement différemment de Moment::fromNow()
. Moment::calendar()
formatera une date avec des chaînes différentes en fonction de la proximité de la date aujourd'hui.
(nouveau MomentMoment('2014-03-30T16:58:00', 'CET'))->subtractDays(6)->calendar(); // la semaine dernière (new MomentMoment('2014-03-30T16:58:00', 'CET'))->subtractDays(1)->calendar(); // hier(new MomentMoment('2014-03-30T16:58:00', 'CET'))->calendar(); // aujourd'hui(new MomentMoment('2014-03-30T16:58:00', 'CET'))->addDays(1)->calendar(); // demain(new MomentMoment('2014-03-30T16:58:00', 'CET'))->addDays(3)->calendar(); // la semaine prochaine (new MomentMoment('2014-03-30T16:58:00', 'CET'))->addDays(10)->calendar(); // tout le reste
Temps | Afficher |
---|---|
La semaine dernière | Lundi dernier à 15h54 |
La veille | Hier à 15h54 |
Le même jour | Aujourd'hui à 15h54 |
Le lendemain | Demain à 15h54 |
La semaine prochaine | mercredi à 15h54 |
Tout le reste | 04/09/2014 |
Remarque : utilisez $moment->calendar(false)
pour laisser de côté l'heure at 00:00
.
Même processus que pour moment.js : mute le moment original en le définissant au début/fin d'une unité de temps.
$m = new MomentMoment('20140515T10:15:23', 'CET');$m->startOf('year'); // défini sur le 1er janvier à 00h00 cette année$m->startOf(' quarter'); // défini au début du trimestre en cours, 1er jour du mois, 00:00$m->startOf('month'); // défini sur le premier de ce mois, 00:00$m->startOf('week'); // défini sur le premier jour de cette semaine, 00:00$m->startOf('day'); // défini sur 00h00 aujourd'hui$m->startOf('hour'); // défini sur maintenant, mais avec 0 min, 0 secs$m->startOf('minute'); // défini sur maintenant, mais avec 0 seconde$m->endOf('year'); // défini sur le 31 décembre à 23h59 cette année$m->endOf(' quarter'); // défini sur la fin du trimestre en cours, dernier jour du mois, 23:59$m->endOf('month'); // défini sur le dernier de ce mois, 23:59$m->endOf('week'); // défini sur le dernier jour de cette semaine, 23:59$m->endOf('day'); // défini sur 23h59 aujourd'hui$m->endOf('hour'); // défini sur maintenant, mais avec 59 minutes, 59 secondes$m->endOf('minute'); // défini sur maintenant, mais avec 59 secondes
Remarque : j'ai ignoré la période de second
puisque nous ne parlons pas de millisecondes.
Pour l'un de mes clients, j'avais besoin d'obtenir des moments certains jours de la semaine. La tâche était la suivante : donnez-moi les dates des Tuesdays
et Thursdays
pour les trois prochaines semaines. J'ai donc ajouté un petit gestionnaire qui fait exactement cela. En conséquence, vous recevrez un tableau rempli d’ Moment Objects
.
// 1 - 7 = Lun - Dim$weekdayNumbers = [2, // mardi4, // jeudi];$m = new MomentMoment();$dates = $m->getMomentsByWeekdays($weekdayNumbers, 3);// $ dates = [Moment, Moment, Moment...]
Vous pouvez maintenant parcourir le résultat et le mettre en forme dans un champ déroulant ou pour tout ce dont vous pourriez avoir besoin.
Essayez de porter des méthodes utiles à partir de moment.js
Ajouter des tests unitaires
ajouté :
prise en charge de PHP 8.2 #218
prise en charge de PHP 8.3 #227
fixé:
Langue française
Tests canadiens
ajouté :
Espéranto local
Localité kazakhe
fixé:
Correspondance de signature DateTime :: createFromFormat
ajouté :
Paramètres régionaux farsi
ajouté :
vérifications du code par rapport aux flux de travail d'action GH
Paramètres régionaux canadiens pour l'anglais/le français
fixé:
fusionner avec quelques PR (merci !)
ajouté :
Terminer les paramètres régionaux
fixé:
Localité suédoise
paramètres régionaux italiens mis à jour
ajouté :
formats personnalisés pour en_US
indicateur pour charger des paramètres régionaux similaires
problème d'indication de type résolu
fixé:
format relatifTime manquant
autoriser un unixtime à 9 chiffres
correction du RFC2822 comme format valide
temps relatif fixe
ajout de la langue norvégienne
correctifs et ajouts de paramètres régionaux (voir les commits du 22.11.2018)
fixé:
Région occitane
fixé:
Problème de paramètres régionaux russes
ajouté :
Portugais (pt_PT)
fixé:
Commande locale hongroise en semaine
ajouté :
autoriser l'initialisation de Moment avec l'horodatage Unix sans commencer @
fixé:
Correction du format de 'LLL' dans les formats personnalisés
fixé:
suppression de la syntaxe php5.4+ uniquement
fixé:
Cas correct des noms de jours et de mois danois
Langue française
PHPDocs
ajouté :
consts pour NO_TZ_MYSQL
, NO_TZ_NO_SECS
et NO_TIME
lors de l'analyse des dates
ajouté :
Format personnalisé néerlandais
fixé:
Paramètres régionaux russes
ajouté :
Localité turque
fixé:
Lieu lengadocien
fixé:
PHP7.1 setTime nécessite $microseconds
ajouté :
Localité ukrainienne
ajouté :
Paramètres régionaux hongrois
fixé:
Lieu lengadocien
ajouté :
Localité vietnamienne
Lieu lengadocien
ajouté :
Changer le fuseau horaire par défaut
fixé:
FormatsDocuments d'interface
ajouté :
Paramètres régionaux arabes
Format personnalisé au niveau local
fixé:
Paramètres régionaux russes
ajouté :
Tests de paramètres régionaux russes
fixé:
Paramètres régionaux polonais
Calcul des secondes
fixé:
Russe : plus de corrections de temps relatif
fixé:
Heure relative des paramètres régionaux russes : traitement journalier
fixé:
manque de gestion immuable
fixé:
Paramètres régionaux polonais améliorés (ajout de Nominativ)
fixé:
Paramètres régionaux chinois
ajout des formats acceptés au README
fixé:
Localité thaïlandaise
ajouté :
Localité catalane
fixé:
Test des paramètres régionaux polonais
ajouté :
Paramètres régionaux russes
fixé:
Test des paramètres régionaux polonais
ajouté :
Mode immuable
fixé:
Paramètres régionaux polonais
ajouté :
Paramètres régionaux polonais
ajouté :
Localité indonésienne
ajouté :
Paramètres régionaux japonais
fixé:
faute de frappe dans les paramètres régionaux néerlandais
ajouté :
Paramètres régionaux néerlandais
ajouté :
Localité suédoise
ajouté :
Paramètres régionaux danois
fixé:
jour de semaine de début/fin fixe pour les paramètres régionaux roumains
fixé:
ajout d'un caractère délimiteur aux paramètres régionaux italiens
fixé:
renvoyer une nouvelle instance pour startOf/endOf pour la semaine, le mois, le trimestre
ajouté :
locale tchèque
ajouté :
les paramètres régionaux calendar
reçoivent comme fermeture les paramètres suivants function(Moment $m) {}
La locale relativeTime
reçoit comme fermeture les paramètres suivants function($count, $direction, Moment $m) {}
ajouté :
correction des fermetures de passage aux paramètres régionaux (calendrier, relativeTime)
définir les informations correctes sur les paramètres régionaux allemands
ajouté :
correction des chaînes de paramètres régionaux thaïlandais
ajouté :
lieu chinois traditionnel
ajouté :
langue chinoise
le formateur ordinal reçoit maintenant le token
, par exemple le jeton dans dS
est d
corrigé : problème d'ordinal anglais pour les nombres entre 11 et 13
ajouté : locale italienne
corrigé : problème d'ordinal anglais
ajouté : locale portugaise
fixé:
Les paramètres régionaux affichaient un mauvais nom de mois (#34)
Modification de l'ordre des jours de la semaine dans les fichiers de paramètres régionaux
ajouté :
getWeekdayNameLong()
getWeekdayNameShort()
getMonthNameLong()
getMonthNameShort()
ajouté :
Localité : Thaï
ajouté :
getMois()
getAnnées()
obtenirRelative()
Lieu
MomentDeVo :
fixé:
getSeconds() montre également la direction
MomentDeVo :
fixé:
problème de fuseau horaire qui s'est produit uniquement pour les dates Unixtime
autre:
la direction revient maintenant : "futur" (-) / "passé" (+)
les valeurs de temps sont désormais converties en flottants
MomentDeVo :
fixé:
fuseau horaire non reconnu lors de la construction d'un Moment
ajouté :
getMomentsByWeekdays()
getWeekday()
getWeekOfYear()
autre:
texte échappé
ajouté :
par exemple, [Hello World]
sera automatiquement transformé en Hello World
par exemple, WS
pour la 21e semaine de l'année affiche désormais le 21th
etc.
obtenir la période d'un trimestre donné dans une année donnée
week
= semaine de l'année
month
= mois de l'année
quarter
= trimestre de l'année
créer un nouveau moment mutable basé sur l'instance donnée
startOf et endOf tels qu'implémentés par moment.js
obtenir le trimestre d'une date donnée
setDay()
getDay()
setMois()
getMois()
setAnnée()
getAnnée()
getQuarter()
setSecond()
obtenirSecond()
setMinute()
getMinute()
setHour()
getHeure()
clonage ajouté()
ajout de getInterval()
à MomentPeriodVo
pour indiquer l'intervalle de la période donnée
ajouté une classe statique MomentHelper
correction du calcul ordinal interne de PHP (également en combinaison avec le formatage moment.js)
vous pouvez maintenant échapper au texte en l'enveloppant dans []
supprimé:
ajouter()
soustraire()
ajouté :
format de calendrier tel qu'implémenté par moment.js
fixé:
incompatibilité avec PHP 5.3
ajouté :
test des dates au format YYYY-mm-dd
et YYYY-mm-ddTHH:ii:ss
lance MomentException sur des dates non valides
Exception levée en tant que MomentException
Validation de la date à l'instanciation :
ajouterSeconds()
ajouterMinutes()
ajouterHeures()
ajouterJours()
ajouter des semaines()
ajouter des mois()
ajouter des années()
soustraireSeconds()
soustraireMinutes()
soustraireHeures()
soustraireJours()
soustraireSemaines()
soustraireMois()
soustraireAnnées()
obsolète :
ajouter()
soustraire()
Les responsables de ce projet suggèrent de suivre le guide de contribution.
Moment.php est librement distribuable selon les termes de la licence MIT.
Copyright (c) 2017 Tino Ehrich
L'autorisation est accordée par la présente, gratuitement, à toute personne obtenant une copie de ce logiciel et des fichiers de documentation associés (le « Logiciel »), d'utiliser le Logiciel sans restriction, y compris, sans limitation, les droits d'utilisation, de copie, de modification, de fusion. , publier, distribuer, accorder des sous-licences et/ou vendre des copies du Logiciel, et permettre aux personnes à qui le Logiciel est fourni de le faire, sous réserve des conditions suivantes :
L'avis de droit d'auteur ci-dessus et cet avis d'autorisation doivent être inclus dans toutes les copies ou parties substantielles du logiciel.
LE LOGICIEL EST FOURNI « TEL QUEL », SANS GARANTIE D'AUCUNE SORTE, EXPRESSE OU IMPLICITE, Y COMPRIS MAIS SANS LIMITATION LES GARANTIES DE QUALITÉ MARCHANDE, D'ADAPTATION À UN USAGE PARTICULIER ET DE NON-VIOLATION. EN AUCUN CAS LES AUTEURS OU LES TITULAIRES DES DROITS D'AUTEUR NE SERONT RESPONSABLES DE TOUTE RÉCLAMATION, DOMMAGES OU AUTRE RESPONSABILITÉ, QUE CE SOIT DANS UNE ACTION CONTRACTUELLE, DÉLIT OU AUTRE, DÉCOULANT DE, DE OU EN RELATION AVEC LE LOGICIEL OU L'UTILISATION OU D'AUTRES TRANSACTIONS DANS LE LOGICIEL.