Si j'ai une chaîne de caractères PHP au format "mm-dd-YYYY" (par exemple, 10-16-2003), comment puis-je la convertir correctement en une "date", puis en une "date-heure" au format "AAAA-mm-jj" ? La seule raison pour laquelle je demande à la fois Date
et DateTime
est que j'ai besoin de l'un à un endroit, et de l'autre à un autre endroit.
Utilisez strtotime()
sur votre première date puis date('Y-m-d' ;)
pour la reconvertir :
$time = strtotime('10/16/2003');
$newformat = date('Y-m-d',$time);
echo $newformat;
// 2003-10-16
Notez qu'il y a une différence entre l'utilisation de la barre oblique /
et du trait d'union -
dans la fonction [strtotime()
][1]. Pour citer php.net :
Les dates au format m/d/y ou d-m-y sont désambiguïsées en regardant le séparateur séparateur entre les différents composants : si le séparateur est un Si le séparateur est une barre oblique (/), le format américain m/d/y est supposé. supposé ; alors que si le séparateur est un séparateur est un tiret (-) ou un point (.), alors le format le format européen d-m-y est adopté.
[1] : http://php.net/strtotime
Vous devez faire attention aux formats m/d/Y et m-d-Y. PHP considère que /
signifie m/d/Y et -
signifie d-m-Y. Dans ce cas, je décrirais explicitement le format d'entrée :
$ymd = DateTime::createFromFormat('m-d-Y', '10-16-2003')->format('Y-m-d');
De cette façon, vous n'êtes pas aux caprices d'une certaine interprétation.
$d = new DateTime('10-16-2003');
$timestamp = $d->getTimestamp(); // Unix timestamp
$formatted_date = $d->format('Y-m-d'); // 2003-10-16
Edit : vous pouvez aussi passer une DateTimeZone au constructeur de DateTime() pour assurer la création de la date pour le fuseau horaire désiré, et non celui par défaut du serveur.