PHP Convertir une date dans un autre format


Exemple

Les bases

Le moyen le plus simple de convertir un format de date en un autre est d'utiliser strtotime() avec date() . strtotime() convertira la date en un horodatage Unix . Cet horodatage Unix peut ensuite être transmis à date() pour le convertir au nouveau format.

$timestamp = strtotime('2008-07-01T22:35:17.02');
$new_date_format = date('Y-m-d H:i:s', $timestamp);

Ou comme un one-liner:

$new_date_format = date('Y-m-d H:i:s', strtotime('2008-07-01T22:35:17.02'));

Gardez à l'esprit que strtotime() requiert que la date soit dans un format valide . strtotime() ne fournissez pas un format valide, strtotime() renverra false, ce qui entraînera votre date du 1969-12-31.

Utiliser DateTime()

Depuis PHP 5.2, PHP offrait la classe DateTime() qui nous offre des outils plus puissants pour travailler avec les dates (et les heures). Nous pouvons réécrire le code ci-dessus en utilisant DateTime() comme suit:

$date = new DateTime('2008-07-01T22:35:17.02');
$new_date_format = $date->format('Y-m-d H:i:s');

Travailler avec les horodatages Unix

date() prend un timestamp Unix comme second paramètre et renvoie une date formatée pour vous:

$new_date_format = date('Y-m-d H:i:s', '1234567890');

DateTime () fonctionne avec les horodatages Unix en ajoutant un @ avant le timestamp:

$date = new DateTime('@1234567890');
$new_date_format = $date->format('Y-m-d H:i:s');

Si l'horodatage que vous avez est en millisecondes (il peut se terminer en 000 et / ou que l'horodatage comporte treize caractères), vous devrez le convertir en secondes avant de pouvoir le convertir dans un autre format. Il y a deux façons de faire cela:

  • Coupez les trois derniers chiffres en utilisant substr()

Le découpage des trois derniers chiffres peut être obtenu de plusieurs manières, mais l'utilisation de substr() est la plus simple:

$timestamp = substr('1234567899000', -3);
  • Diviser les substrats par 1000

Vous pouvez également convertir l'horodatage en secondes en divisant par 1000. Étant donné que l'horodatage est trop grand pour que les systèmes 32 bits puissent faire des calculs, vous devrez utiliser la bibliothèque BCMath pour effectuer les calculs sous forme de chaînes:

$timestamp = bcdiv('1234567899000', '1000');

Pour obtenir un horodatage Unix, vous pouvez utiliser strtotime() qui renvoie un horodatage Unix:

$timestamp = strtotime('1973-04-18');

Avec DateTime (), vous pouvez utiliser DateTime::getTimestamp()

$date = new DateTime('2008-07-01T22:35:17.02');
$timestamp = $date->getTimestamp();

Si vous utilisez PHP 5.2, vous pouvez utiliser l'option de formatage U place:

$date = new DateTime('2008-07-01T22:35:17.02');
$timestamp = $date->format('U');

Travailler avec des formats de date non standard et ambigus

Malheureusement, toutes les dates avec lesquelles un développeur doit travailler sont dans un format standard. Heureusement, PHP 5.3 nous a fourni une solution pour cela. DateTime::createFromFormat() nous permet d'indiquer à PHP le format dans lequel une chaîne de date est DateTime::createFromFormat() de sorte qu'elle puisse être analysée avec succès dans un objet DateTime pour une manipulation ultérieure.

$date = DateTime::createFromFormat('F-d-Y h:i A', 'April-18-1973 9:48 AM');
$new_date_format = $date->format('Y-m-d H:i:s');

En PHP 5.4, nous avons eu la possibilité d’ajouter l’accès des membres de classe à l’instanciation, ce qui nous permet de transformer notre code DateTime() en une ligne unique:

$new_date_format = (new DateTime('2008-07-01T22:35:17.02'))->format('Y-m-d H:i:s');

Malheureusement, cela ne fonctionne pas encore avec DateTime::createFromFormat() .