Conversion d'une chaîne en Date et DateTime

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.

Solution

Utilisez strtotime() sur votre première date puis date('Y-m-d&#39 ;) 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

Commentaires (8)

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.

Commentaires (4)
$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.

Commentaires (2)