Convertendo um carimbo de data / hora UNIX em sequência de datas formatada

183

Usando o PHP, desejo converter os carimbos de data e hora do UNIX em cadeias de datas semelhantes a esta: 2008-07-17T09:24:17Z

Como faço para converter um registro de data e hora como 1333699439em 2008-07-17T09:24:17Z?

Utku Dalmaz
fonte

Respostas:

321

Tente gmdateassim:

<?php
$timestamp=1333699439;
echo gmdate("Y-m-d\TH:i:s\Z", $timestamp);
?>
ensopado
fonte
53
Por favor, não que gmdate()retorne a data / hora em GMT. date()retornará a data / hora local.
Matt K
5
O comentário acima não faz sentido nesse contexto. O uso da data com o segundo parâmetro como carimbo de data e hora, como mostrado na resposta, não imprimirá a data no fuso horário local. A data será impressa com as informações do fuso horário ignoradas, pois o carimbo de data / hora não possui informações do fuso horário. gmdate e date com o segundo parâmetro de registro de data e hora como 1333699439 imprimirão a mesma data e hora.
Tinus Tate
1
@ MattK: O que faz sentido, já que Z indica UTC. Tinus: os carimbos de data e hora do Unix não contêm compensações de fuso horário. datee gmdate's de saída irá diferir com base na variável TZ (em * nix pelo menos)
Gert van den Berg
Também seria bom se essa resposta incluísse a solução para o problema oposto, convertendo uma data formatada em horário UNIX.
Olle Härstedt 14/09/18
117

use a função de data date ( string $format [, int $timestamp = time() ] )

Use date('c',time())como formato para converter para a data ISO 8601 (adicionada no PHP 5) -2012-04-06T12:45:47+05:30

use date("Y-m-d\TH:i:s\Z",1333699439)para obter2012-04-06T13:33:59Z

Aqui estão alguns dos formatos que a função de data suporta

<?php
$today = date("F j, Y, g:i a");                 // March 10, 2001, 5:16 pm
$today = date("m.d.y");                         // 03.10.01
$today = date("j, n, Y");                       // 10, 3, 2001
$today = date("Ymd");                           // 20010310
$today = date('h-i-s, j-m-y, it is w Day');     // 05-16-18, 10-03-01, 1631 1618 6 Satpm01
$today = date('\i\t \i\s \t\h\e jS \d\a\y.');   // it is the 10th day.
$today = date("D M j G:i:s T Y");               // Sat Mar 10 17:16:18 MST 2001
$today = date('H:m:s \m \i\s\ \m\o\n\t\h');     // 17:03:18 m is month
$today = date("H:i:s");                         // 17:16:18
?>
Sandeep Manne
fonte
como posso converter timestamp específico com 'c'? por exemplo 1333699439
Utku Dalmaz
esta data não funciona ( "Ymd \ TH: i: s \ Z", 1333699439) eu tenho 2012-04-06EDT04: 03: 59-14400
Utku Dalmaz
@Ahmet - o uso Nota de aspas duplas e individuais ao definir a string
Mark Baker
1
@ user2060451 nada precedido por uma barra invertida é mostrado como o personagem literal na seqüência de tempo, resultando
verbumSapienti
1
@ user2060451: Z deve indicar a hora UTC (nesse caso, gmdate deve ser usado ...) Confira as informações da ISO8601 em seu recurso de pesquisa favorito.
Gert van den Berg
56

Supondo que você esteja usando o PHP5.3, a maneira moderna de lidar com datas é através da classe DateTime nativa . Para obter a hora atual, basta ligar para

$currentTime = new DateTime();

Para criar um objeto DateTime a partir de um carimbo de data / hora específico (ou seja, não agora)

$currentTime = DateTime::createFromFormat( 'U', $timestamp );

Para obter uma string formatada, você pode chamar

$formattedString = $currentTime->format( 'c' );

Veja a página do manual aqui

licorvicar
fonte
1
como posso converter timestamp específico com isso? por exemplo 1333699439
Utku Dalmaz
@ Norse Claro que li o post dele. Toda a informação que ele precisava estava no meu post. Tudo o que ele precisava fazer era ler os documentos do PHP para o objeto DateTime. Eu editei minha postagem para torná-la ainda mais clara. O objeto DateTime é o caminho a seguir no PHP e todos os novatos devem ser incentivados a usá-lo. Até agora, sou o único que forneceu essa resposta. Btw, acho o seu comentário um pouco agressivo e não muito no espírito de SO.
liquorvicar
@ Ahmetvardar Veja minha edição, embora tudo isso esteja nos documentos do PHP para os quais forneço um link. Peço fortemente que você comece a usar o objeto DateTime. Ele fornece excelente suporte para datas / horas, incluindo fusos horários etc
liquorvicar
18

É muito importante definir um fuso horário padrão para obter o resultado correto

<?php
// set default timezone
date_default_timezone_set('Europe/Berlin');

// timestamp
$timestamp = 1307595105;

// output
echo date('d M Y H:i:s Z',$timestamp);
echo date('c',$timestamp);
?> 

Ajuda de conversão online: http://freeonlinetools24.com/timestamp

klit67
fonte
2
Em ISO8601, Zé usado para indicar que é um tempo UTC, de modo que o fuso horário deve ser definido comoUTC
Gert van den Berg
11
<?php
$timestamp=1486830234542;
echo date('Y-m-d H:i:s', $timestamp/1000);
?>
tomar sol
fonte
6
Funciona sem a parte dividida. Caso contrário, a data será padronizada para 1970.
Script47
6
$unixtime_to_date = date('jS F Y h:i:s A (T)', $unixtime);

Isso deve funcionar para.

Linus Gudn Jokela
fonte
1

Achei as informações desta conversa tão úteis que só queria adicionar como as descobri usando o carimbo de data e hora do meu banco de dados MySQL e um pouco de PHP

 <?= date("Y-m-d\TH:i:s\+01:00",strtotime($column['loggedin'])) ?>

A saída foi: 2017-03-03T08: 22: 36 + 01: 00

Muito obrigado Stewe, você respondeu foi um eureka para mim.

Samuel Ramzan
fonte
0

Você pode fazer como ...

$originalDate = "1585876500";

echo $newDate = date("Y-m-d h:i:sa", date($originalDate));
Abhishek Gupta
fonte