Changer le format d’une date en PHP
Accueil Tags Recherche27 Septembre 2013
Changer le format d’une date en PHP
Court article, un peu typé post-it, pour partager une petite fonction avec vous.Lorsque j’utilise des dates dans un environnement PHP/MySQL, elles se retrouvent généralement sous deux formats :
Y-m-d H:i:s
en base de donnée (le formatDATETIME
)d/m/Y
en HTML, pour l’affichage
Pour changer le format d’une date, on passe généralement par une étape intermédiaire : le timestamp (l’heure Unix, ou Posix selon les appellations). On récupère ce timestamp à l’aide de la fonction strtotime()
, et on le repasse sous un autre format à l’aide de la fonction date()
:
$date = '27-09-2013';
echo date('Y-m-d H:i:s', strtotime($date));
// 2013-09-27 00:00:00
Le soucis avec cette méthode, c’est que vous êtes bridé sur votre format de départ. En Europe, nous utilisons des dates du type jour-mois-année, alors qu’outre Atlantique, on utilise un type année-mois-jour. Afin d’éviter toute confusion possible entre ces deux types, la fonction strtotime()
utilise une convention :
- Si le séparateur est un tiret (-), la date est considérée comme étant européenne
- Si le séparateur est un slash (/), la date est considérée comme étant américaine
En reprenant notre exemple, mais en modifiant simplement le séparateur, plus rien ne fonctionne :
$date = '27/09/2013';
echo date('Y-m-d H:i:s', strtotime($date));
// 1970-01-01 01:00:00
La solution à ce problème se trouve dans la classe DateTime
. Cette classe permet elle aussi de travailler sur les dates, avec une approche orientée objet. Une approche donc un peu plus verbeuse, mais qui a ses avantages. La classe DateTime
permet en effet de spécifier le format de la date en entrée, quand vous voulez récupérer le timestamp. Notre code devient donc :
$date = '27/09/2013';
$dt = DateTime::createFromFormat('d/m/Y', $date)
echo $dt->format('Y-m-d H:i:s');
// 2013-09-27 13:07:29
Il n’y a plus qu’a se préparer une petite classe utilitaire pour simplifier l’utilisation du tout :
class DateFormat {
public static function alter($date, $before, $after) {
return DateTime::createFromFormat($before, $date)->format($after);
}
public static function toSQL($date, $before = 'd/m/Y') {
return self::alter($date, $before, 'Y-m-d H:i:s');
}
public static function toHTML($date, $before = 'Y-m-d H:i:s') {
return self::alter($date, $before, 'd/m/Y');
}
}
$date = '27/09/2013';
echo DateFormat::toSQL($date);
// 2013-09-27 13:07:29
Liens
PHP Doc : la fonction strtotime() PHP Doc : la fonction date() PHP Doc : la classe DateTime