Come visualizzare una data come iso 8601 con PHP
-
05-09-2019 - |
Domanda
Sto cercando di visualizzare un datetime dal mio database MySQL come una stringa formattata iso 8601 con PHP ma sta venendo fuori sbagliato.
17 ottobre 2008 è venuta fuori come: 1969-12-31T18: 33: 28-06: 00, che chiaramente non è corretta (l'anno dovrebbe essere 2008 non 1969)
Questo è il codice che sto usando:
<?= date("c", $post[3]) ?>
$post[3] is the datetime (CURRENT_TIMESTAMP)
dal mio database MySQL.
Tutte le idee che sta andando male?
Altri suggerimenti
Uso della classe href="http://www.php.net/manual/en/book.datetime.php"> DateTime disponibili in PHP versione 5.2 sarebbe stato fatto in questo modo:
$datetime = new DateTime('17 Oct 2008');
echo $datetime->format('c');
Dal PHP 5.4 si può fare questo come un one-liner:
echo (new DateTime('17 Oct 2008'))->format('c');
style procedurale:
echo date_format(date_create('17 Oct 2008'), 'c');
// Output : 2008-10-17T00:00:00+02:00
Oggetto orientato stile:
$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
ibrido 2:
echo date_create('17 Oct 2008')->format('c');
// Output : 2008-10-17T00:00:00+02:00
Note:
1) Si potrebbe anche usare 'Y-m-d\TH:i:sP'
come alternativa al 'c'
per il formato.
2) Il fuso orario predefinito del vostro ingresso è il fuso orario del server. Se si desidera che l'ingresso sia per un fuso orario diverso, è necessario impostare il fuso orario in modo esplicito. Questo sarà anche un impatto vostra uscita, però:
echo date_format(date_create('17 Oct 2008 +0800'), 'c');
// Output : 2008-10-17T00:00:00+08:00
3) Se si desidera che l'uscita sia per un fuso orario diverso da quello del vostro ingresso, è possibile impostare il fuso orario in modo esplicito:
echo date_format(date_create('17 Oct 2008')->setTimezone(new DateTimeZone('America/New_York')), 'c');
// Output : 2008-10-16T18:00:00-04:00
Per la 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';
}
Questa è la buona funzione per il pre PHP 5: Ho aggiunto differenza GMT al termine, non è hardcoded.
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));
}