Frage

Ich versuche, als ISO 8601 Formatierter String mit PHP Datetime aus meiner MySQL-Datenbank angezeigt werden, aber es kommt aus falsch.

17. Oktober 2008 kommt aus wie: 1969-12-31T18: 33: 28-06: 00, die eindeutig nicht korrekt ist (das Jahr 2008 nicht 1969 sein soll)

Dies ist der Code, den ich mit:

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

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

Alle Ideen, was falsch läuft?

War es hilfreich?

Lösung

Das zweite Argument von date ist ein UNIX-Zeitstempel, keine Datenbank-Zeitstempel-String.

Sie benötigen eine Datenbank Zeitstempel konvertieren mit strtotime .

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

Andere Tipps

Datetime-Klasse verwendet in PHP-Version 5.2 es wie dies geschehen würde:

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

es in Aktion

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

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

Procedural style:

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

Weitere Informationen:

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

2) Die Standardzeitzone Ihrer Eingabe ist die Zeitzone des Servers. Wenn Sie die Eingabe sein für eine andere Zeitzone wollen, müssen Sie Ihre Zeitzone explizit einzustellen. Dies wird auch die Ausgabe auswirken, jedoch:

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

3) Wenn Sie die Ausgabe sein für eine Zeitzone unterscheidet sich von Ihrer Eingabe möchten, können Sie Ihre Zeitzone explizit:

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

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';
}

Hier ist die gute Funktion für Pre PHP 5: Ich habe GMT Differenz am Ende, es ist nicht fest einprogrammiert.

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));
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top