wake-up-neo.com

So zeigen Sie ein Datum im ISO 8601-Format mit PHP

Ich versuche, eine Datums-/Uhrzeitangabe aus meiner MySQL-Datenbank als ISO 8601-formatierten String mit PHP) anzuzeigen, aber es kommt falsch heraus.

Der 17. Oktober 2008 wird veröffentlicht als: 1969-12-31T18: 33: 28-06: 00, was eindeutig nicht korrekt ist (das Jahr sollte 2008 nicht 1969 sein)

Dies ist der Code, den ich verwende:

<?= date("c", $post[3]) ?>

$post[3] is the datetime (CURRENT_TIMESTAMP) aus meiner MySQL-Datenbank.

Irgendwelche Ideen, was los ist?

55

Das zweite Argument von date ist ein UNIX-Zeitstempel und keine Datenbank-Zeitstempelzeichenfolge.

Sie müssen Ihren Datenbank-Zeitstempel mit strtotime konvertieren.

<?= date("c", strtotime($post[3])) ?>
71

Wenn Sie die DateTime-Klasse verwenden, die in PHP Version 5.2) verfügbar ist, geschieht dies folgendermaßen:

$datetime = new DateTime('17 Oct 2008');
echo $datetime->format('c');

In Aktion sehen

Ab PHP 5.4 können Sie dies als Einzeiler tun:

echo (new DateTime('17 Oct 2008'))->format('c');
30
John Conde

Verfahrensstil:

echo date_format(date_create('17 Oct 2008'), 'c');
// Output : 2008-10-17T00:00:00+02:00

Objektorientierter Stil:

$formatteddate = new DateTime('17 Oct 2008');
echo $datetime->format('c');
// Output : 2008-10-17T00:00:00+02:00

Hybrid 1:

echo date_format(new DateTime('17 Oct 2008'), 'c');
// Output : 2008-10-17T00:00:00+02:00

Hybrid 2:

echo date_create('17 Oct 2008')->format('c');
// Output : 2008-10-17T00:00:00+02:00

Anmerkungen :

1) Sie könnten auch 'Y-m-d\TH:i:sP' als Alternative zu 'c' für dein Format.

2) Die Standardzeitzone Ihrer Eingabe ist die Zeitzone Ihres Servers. Wenn die Eingabe für eine andere Zeitzone erfolgen soll, müssen Sie Ihre Zeitzone explizit festlegen. Dies wirkt sich jedoch auch auf Ihre Ausgabe aus:

echo date_format(date_create('17 Oct 2008 +0800'), 'c');
// Output : 2008-10-17T00:00:00+08:00

3) Wenn die Ausgabe für eine andere Zeitzone als die Eingabe erfolgen soll, können Sie die Zeitzone explizit festlegen:

echo date_format(date_create('17 Oct 2008')->setTimezone(new DateTimeZone('America/New_York')), 'c');
// Output : 2008-10-16T18:00:00-04:00
13
John Slegers

Für pre PHP 5:

function iso8601($time=false) {
    if(!$time) $time=time();
    return date("Y-m-d", $time) . 'T' . date("H:i:s", $time) .'+00:00';
}
8
Newmania

Hier ist die gute Funktion für pre PHP 5: Ich habe am Ende einen GMT-Unterschied hinzugefügt, der nicht fest codiert ist.

function iso8601($time=false) {
    if ($time === false) $time = time();
    $date = date('Y-m-d\TH:i:sO', $time);
    return (substr($date, 0, strlen($date)-2).':'.substr($date, -2));
}
7
Guillaume