Question

Je suis en train d'afficher une datetime de ma base de données MySQL en tant iso 8601 chaîne avec PHP, mais formated ça sort mal.

17 octobre 2008 vient comme: 1969-12-31T18: 33: 28-06: 00 qui est manifestement pas correct (l'année 2008 devrait être pas 1969)

Voici le code que je utilise:

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

$post[3] is the datetime (CURRENT_TIMESTAMP) de ma base de données MySQL.

Toutes les idées ce qui ne va pas?

Était-ce utile?

La solution

Le second argument de date est un timestamp UNIX, pas une chaîne d'horodatage de base de données.

Vous devez convertir votre horodatage de base de données avec strtotime .

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

Autres conseils

Utilisation de la classe DateTime disponible dans la version PHP 5.2, il serait fait comme ceci:

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

voir en action

A partir de PHP 5.4, vous pouvez le faire comme une doublure:

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

Style procédural:

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

Style orienté objet:

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

hybride 1:

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

hybride 2:

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

Notes:

1) Vous pouvez également utiliser 'Y-m-d\TH:i:sP' comme une alternative à 'c' pour votre format.

2) Le fuseau horaire par défaut de votre entrée est le fuseau horaire de votre serveur. Si vous voulez que l'entrée soit pour un fuseau horaire différent, vous devez définir votre fuseau horaire explicitement. Cela permettra également un impact sur votre sortie, cependant:

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

3) Si vous voulez que la sortie soit pour un fuseau horaire différent de celui de votre entrée, vous pouvez définir votre fuseau horaire explicitement:

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

Pour PHP pré 5:

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

Voici la bonne fonction de pré PHP 5: J'ai ajouté différence GMT à la fin, il ne 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));
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top