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?

È stato utile?

Soluzione

Il secondo argomento di date è un timestamp UNIX, non una stringa di dati timestamp.

È necessario convertire il timestamp database con strtotime .

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

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

vederlo in azione

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));
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top