Les bases
La manière la plus simple de convertir un format de date en un autre est d'utiliser strtotime()
avec date()
. strtotime()
convertira la date en horodatage Unix . Cet horodatage Unix peut ensuite être transmis pour date()
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 en monoplace:
$new_date_format = date('Y-m-d H:i:s', strtotime('2008-07-01T22:35:17.02'));
N'oubliez pas que strtotime()
la date doit être dans un format valide . Si vous ne fournissez pas un format valide, le résultat sera strtotime()
faux, ce qui entraînera la date du 31 décembre 1969.
En utilisant DateTime()
Depuis PHP 5.2, PHP offrait la DateTime()
classe qui nous offre des outils plus puissants pour travailler avec les dates (et l'heure). 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 horodatage Unix comme deuxième 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 l'horodatage:
$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 l'horodatage est de 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 procéder:
- Coupez les trois derniers chiffres avec
substr()
Le découpage des trois derniers chiffres peut être obtenu de plusieurs manières, mais l'utilisation substr()
est la plus simple:
$timestamp = substr('1234567899000', -3);
- Divisez le substrat par 1000
Vous pouvez également convertir l'horodatage en secondes en divisant par 1000. Parce que l'horodatage est trop grand pour que les systèmes 32 bits fassent 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()
ce 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' U
option de formatage à la place:
$date = new DateTime('2008-07-01T22:35:17.02');
$timestamp = $date->format('U');
Utilisation de formats de date non standard et ambigus
Malheureusement, toutes les dates avec lesquelles un développeur doit travailler ne sont pas au format standard. Heureusement, PHP 5.3 nous a fourni une solution pour cela. DateTime::createFromFormat()
nous permet de dire à PHP dans quel format une chaîne de date est afin 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 gagné la possibilité de faire un accès aux membres de la classe lors de l'instanciation, ce qui nous permet de transformer notre DateTime()
code en une ligne:
$new_date_format = (new DateTime('2008-07-01T22:35:17.02'))->format('Y-m-d H:i:s');
$new_date_format = DateTime::createFromFormat('F-d-Y h:i A', 'April-18-1973 9:48 AM')->format('Y-m-d H:i:s');