(PHP 5 >= 5.3.0, PHP 7, PHP 8)
DateInterval::createFromDateString — Configure un objet DateInterval à partir des parties d'une chaîne
Style orienté objet
Style procédural
Utilise les analyseurs de dates comme celui de DateTimeImmutable et configure un objet DateInterval à partir d'une chaîne de caractères.
datetimeUne date avec des parties relatives. Spécifiquement, le format relatif supporté par l'analyseur utilisé pour les classes DateTimeImmutable, DateTime, et strtotime() sera utilisé pour construire le DateInterval.
Pour utiliser une chaîne au format ISO-8601 comme P7D,
il faut utiliser DateInterval::__construct().
Retourne DateInterval en cas de succès.
Style procédural retourne false en cas d'erreur.
API orientée objet uniquement : Si une chaîne Date/Time invalide est passée, DateMalformedIntervalStringException est levée.
| Version | Description |
|---|---|
| 8.4.0 | A désormais un type de retour provisoire de DateInterval. Auparavant, il était DateInterval|false. |
| 8.3.0 |
DateInterval::createFromDateString() lance désormais
DateMalformedIntervalStringException si une
chaîne invalide est passée. Auparavant, il retournait false,
et un avertissement était émis.
date_interval_create_from_date_string() n'a pas été
modifié.
|
| 8.2.0 |
Seules les propriétés from_string et
date_string seront visibles lorsqu'un objet
DateInterval est créé avec cette méthode.
|
Exemple #1 Analyse d'intervalles de dates valides
<?php
// Chaque ensemble d'intervalles décrit la même durée.
$i = new DateInterval('P1D');
$i = DateInterval::createFromDateString('1 day');
$i = new DateInterval('P2W');
$i = DateInterval::createFromDateString('2 weeks');
$i = new DateInterval('P3M');
$i = DateInterval::createFromDateString('3 months');
$i = new DateInterval('P4Y');
$i = DateInterval::createFromDateString('4 years');
$i = new DateInterval('P1Y1D');
$i = DateInterval::createFromDateString('1 year + 1 day');
$i = new DateInterval('P1DT12H');
$i = DateInterval::createFromDateString('1 day + 12 hours');
$i = new DateInterval('PT3600S');
$i = DateInterval::createFromDateString('3600 seconds');Note:
Les intervalles d'un ensemble qui comportent une partie horaire, tels que
P1DT12Het1 day + 12 hours, ne sont pas interchangeables lorsqu'ils sont ajoutés à un objet date/heure et qu'une transition de fuseau horaire tombe dans cette partie horaire : pour un intervalle créé avec DateInterval::__construct(), la partie horaire correspond au temps écoulé, tandis que pour un intervalle créé avec cette méthode, elle incrémente ou décrémente les valeurs individuelles des composants. Voir Arithmétique avec DateTime.
Exemple #2 Analyse des combinaisons et des intervalles négatifs
<?php
$i = DateInterval::createFromDateString('62 weeks + 1 day + 2 weeks + 2 hours + 70 minutes');
echo $i->format('%d %h %i'), "\n";
$i = DateInterval::createFromDateString('1 year - 10 days');
echo $i->format('%y %d'), "\n";L'exemple ci-dessus va afficher :
449 2 70 1 -10
Exemple #3 Analyse des intervalles de dates relatifs spéciaux
<?php
$i = DateInterval::createFromDateString('last day of next month');
var_dump($i);
$i = DateInterval::createFromDateString('last weekday');
var_dump($i);Résultat de l'exemple ci-dessus en PHP 8.2 :
object(DateInterval)#1 (2) {
["from_string"]=>
bool(true)
["date_string"]=>
string(22) "last day of next month"
}
object(DateInterval)#2 (2) {
["from_string"]=>
bool(true)
["date_string"]=>
string(12) "last weekday"
}
Résultat de l'exemple ci-dessus en PHP 8 est similaire à :
object(DateInterval)#1 (16) {
["y"]=>
int(0)
["m"]=>
int(1)
["d"]=>
int(0)
["h"]=>
int(0)
["i"]=>
int(0)
["s"]=>
int(0)
["f"]=>
float(0)
["weekday"]=>
int(0)
["weekday_behavior"]=>
int(0)
["first_last_day_of"]=>
int(2)
["invert"]=>
int(0)
["days"]=>
bool(false)
["special_type"]=>
int(0)
["special_amount"]=>
int(0)
["have_weekday_relative"]=>
int(0)
["have_special_relative"]=>
int(0)
}
object(DateInterval)#2 (16) {
["y"]=>
int(0)
["m"]=>
int(0)
["d"]=>
int(0)
["h"]=>
int(0)
["i"]=>
int(0)
["s"]=>
int(0)
["f"]=>
float(0)
["weekday"]=>
int(0)
["weekday_behavior"]=>
int(0)
["first_last_day_of"]=>
int(0)
["invert"]=>
int(0)
["days"]=>
bool(false)
["special_type"]=>
int(1)
["special_amount"]=>
int(-1)
["have_weekday_relative"]=>
int(0)
["have_special_relative"]=>
int(1)
}