Was ist das richtige Format, um eine PHP-DateTime-Instanz von „2016.04.30 PM 7:30“ über DateTime::createFromFormat zu erstellen?

Lesezeit: 2 Minuten

Benutzer-Avatar
Lee Han Kyeol

Ich arbeite derzeit an einem WordPress-Projekt, bei dem ich einige benutzerdefinierte Post-Metadaten erhalten und in eine DateTime Beispiel, und rechnen Sie damit.

Wenn ich echo die get_post_meta sieht wie folgt aus.

2016.04.30 Uhr 19:30

Das Format, das ich verwende, um a zu erhalten DateTime Beispiel ist wie folgt.

Ymd A g:i

Aber der Rückgabewert von DateTime::createFromFormat ist false.

// 2016.04.30 PM 7:30
$start_at = DateTime::createFromFormat( 'Y.m.d A g:i', get_post_meta(get_the_ID(), 'as_date', true));
if ($start_at === false) {
    echo 'False format: ' . get_post_meta(get_the_ID(), 'as_date', true);
} else {
    echo $start_at->getTimestamp();
}

Das Ergebnis ist False format: 2016.04.30 PM 7:30.

Was fehlt mir hier? Ich denke, es muss etwas Triviales sein, aber ich komme nicht durch.

Beim Testen stellte ich fest, dass das Problemzeichen im Format das ‘A’ war. Also habe ich herumgestöbert und das gefunden Fehler in PHP (Das ist anscheinend überhaupt kein Fehler!)

Durch die gehen Quellcodees sieht so aus, als würde es AM und PM erst parsen, nachdem bereits eine Stunde geparst wurde.

Wahrscheinlich wäre es am besten, einen regulären Ausdruck schnell zu durchlaufen, um die AM/PM an das Ende zu verschieben:

$thedate = get_post_meta(get_the_ID(), 'as_date', true);
$thedate = preg_replace("/([0-9.]+) ([ap]m) ([0-9:]+)/i", "$1 $3 $2", $thedate);
$start_at = DateTime::createFromFormat('Y.m.d g:i A', $thedate);

Benutzer-Avatar
Harikrishnan

Ändern Sie das Datumsformat und versuchen Sie es createFromFormat

$non_standard_format="2016.04.30 PM 7:30";
$non_standard_format = str_replace('.','-',$non_standard_format);
$date_components = explode(" ",$non_standard_format);
$standard_format = $date_components[0]." ".$date_components[2]." ".$date_components[1];

Versuchen Sie dann, dies an weiterzugeben DateTime::createFromFormat

$start_at = DateTime::createFromFormat( 'Y-m-d g:i A', $standard_format);
if ($start_at === false) {
    echo 'False format: ' . get_post_meta(get_the_ID(), 'as_date', true);
} else {
    echo $start_at->getTimestamp();
}

Unterstützte Datumsformate in PHP

  • Vergessen Sie nicht, den Formatstring von zu ändern 'Y.m.d A g:i' zu 'Y-m-d g:i A' in deinem beispiel.

    – David Weiß

    22. April 2016 um 4:46 Uhr

1370120cookie-checkWas ist das richtige Format, um eine PHP-DateTime-Instanz von „2016.04.30 PM 7:30“ über DateTime::createFromFormat zu erstellen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy