Pergunta

Eu estou tentando exibir uma data e hora do meu banco de dados MySQL como uma string formatada iso 8601 com PHP, mas está saindo errado.

17 out 2008 está saindo como: 1969-12-31T18: 33: 28-06: 00 que não é claramente correta (o ano deve ser 2008 não 1969)

Este é o código que estou usando:

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

$post[3] is the datetime (CURRENT_TIMESTAMP) do meu banco de dados MySQL.

Todas as idéias que está acontecendo de errado?

Foi útil?

Solução

O segundo argumento do date é um timestamp UNIX, e não uma seqüência timestamp banco de dados.

Você precisa converter seu banco de dados com timestamp strtotime .

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

Outras dicas

Usando o href="http://www.php.net/manual/en/book.datetime.php"> classe disponível no PHP versão 5.2 seria feito assim:

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

Veja em ação

A partir do PHP 5.4, você pode fazer isso como uma one-liner:

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

Estilo de procedimento:

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

Estilo orientado a objeto:

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

Híbrido 1:

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

híbrido 2:

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

Notas:

1) Você também pode usar 'Y-m-d\TH:i:sP' como uma alternativa para 'c' para o seu formato.

2) O fuso horário padrão de sua entrada é o fuso horário do seu servidor. Se você quiser a entrada para ser para um fuso horário diferente, você precisa definir o seu fuso horário de forma explícita. Isso também terá impacto sobre sua saída, no entanto:

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

3) Se você quiser que a saída seja para um fuso horário diferente do de sua entrada, você pode definir o fuso horário explicitamente:

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

Para pré PHP 5:

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

Aqui está a boa função para pré PHP 5: Eu adicionei GMT diferença no final, não é codificado.

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));
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top