Konverter et datoformat til et andet i PHP

Er der en enkel måde at konvertere et datoformat til et andet datoformat i PHP?

Jeg har dette:

$old_date = date('y-m-d-h-i-s');            // works

$middle = strtotime($old_date);             // returns bool(false)

$new_date = date('Y-m-d H:i:s', $middle);   // returns 1970-01-01 00:00:00

Men jeg vil selvfølgelig gerne have det til at returnere en aktuel dato i stedet for at returnere den daggry 'o dawn. Hvad gør jeg forkert?

Løsning

Den anden parameter til date() skal være et korrekt tidsstempel (sekunder siden den 1. januar 1970). Du overfører en streng, som date() ikke kan genkende.

Du kan bruge strtotime() til at konvertere en datostreng til et tidsstempel. Men selv strtotime() kan ikke genkende formatet y-m-d-h-i-s.

PHP 5.3 og opefter

Brug DateTime::createFromFormat. Det giver dig mulighed for at angive en nøjagtig maske - ved hjælp af date()-syntaksen - til at analysere indgående stringdatoer med.

PHP 5.2 og lavere

Du skal analysere elementerne (år, måned, dag, time, minut, sekund) manuelt ved hjælp af substr() og aflevere resultaterne til mktime(), som vil bygge dig et tidsstempel.

Men det'er en masse arbejde! Jeg anbefaler at bruge et andet format, som strftime() kan forstå. strftime() forstår nogle datoinput undtagen den næste gang joe glider på isen. f.eks. virker dette:

$old_date = date('l, F d y h:i:s');              // returns Saturday, January 30 10 02:06:34
$old_date_timestamp = strtotime($old_date);
$new_date = date('Y-m-d H:i:s', $old_date_timestamp);   
Kommentarer (4)

Prøv dette:

$old_date = date('y-m-d-h-i-s');
$new_date = date('Y-m-d H:i:s', strtotime($old_date));
Kommentarer (3)

Du skal konvertere $old_date tilbage til et tidsstempel, da date-funktionen kræver et tidsstempel som sit andet argument.

Kommentarer (0)