Convertir una marca de tiempo UNIX en una cadena de fecha con formato

183

Con PHP, quiero convertir las marcas de tiempo de UNIX en cadenas de fecha similares a esta: 2008-07-17T09:24:17Z

¿Cómo convierto una marca de tiempo como 1333699439a 2008-07-17T09:24:17Z?

Utku Dalmaz
fuente

Respuestas:

321

Intenta gmdateasí:

<?php
$timestamp=1333699439;
echo gmdate("Y-m-d\TH:i:s\Z", $timestamp);
?>
stewe
fuente
53
Por favor, no eso gmdate()devuelve la fecha / hora en GMT. date()devolverá la fecha / hora local.
Matt K
55
El comentario anterior no tiene sentido en este contexto. El uso de la fecha con el segundo parámetro como marca de tiempo, como se muestra en la respuesta, no imprimirá la fecha en la zona horaria local. La fecha se imprimirá con la información de zona horaria ignorada, porque la marca de hora no tiene información de zona horaria. gmdate y date con el segundo parámetro de marca de tiempo como 1333699439 imprimirá la misma fecha y hora.
Tinus Tate
1
@MattK: lo cual tiene sentido, ya que Z indica UTC. Tinus: las marcas de tiempo Unix no contienen compensaciones de zona horaria. datey gmdatela salida diferirá en función de la variable TZ (al menos en * nix)
Gert van den Berg
También sería bueno si esta respuesta incluyera la solución para el problema opuesto, convirtiendo una fecha formateada en hora UNIX.
Olle Härstedt
117

utilizar la función de fecha date ( string $format [, int $timestamp = time() ] )

Use date('c',time())como formato para convertir a la fecha ISO 8601 (agregado en PHP 5) -2012-04-06T12:45:47+05:30

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

Estos son algunos de los formatos compatibles con la función de fecha

<?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
fuente
¿Cómo puedo convertir una marca de tiempo específica con 'c'? por ejemplo 1333699439
Utku Dalmaz
esto no funciona la fecha ("Ymd \ TH: i: s \ Z", 1333699439) obtuve 2012-04-06EDT04: 03: 59-14400
Utku Dalmaz
@ Ahmet: tenga en cuenta el uso de comillas dobles y simples al definir la cadena
Mark Baker,
1
@ user2060451 cualquier cosa precedida por una barra diagonal inversa se muestra como el carácter literal en la cadena de tiempo resultante
verbumSapienti
1
@ user2060451: Se supone que Z indica la hora UTC (en cuyo caso se debe usar gmdate ...) Consulte la información ISO8601 de su recurso de investigación favorito.
Gert van den Berg
56

Suponiendo que está utilizando PHP5.3, la forma moderna de manejar las fechas es a través de la clase DateTime nativa . Para obtener la hora actual solo puede llamar

$currentTime = new DateTime();

Para crear un objeto DateTime a partir de una marca de tiempo específica (es decir, no ahora)

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

Para obtener una cadena formateada, puede llamar

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

Vea la página del manual aquí

licorvicar
fuente
1
¿Cómo puedo convertir una marca de tiempo específica con esto? por ejemplo 1333699439
Utku Dalmaz
@Norse Por supuesto que leí su publicación. Toda la información que necesitaba estaba en mi publicación. Todo lo que tenía que hacer era leer los documentos PHP para el objeto DateTime. He editado mi publicación para hacerlo aún más claro. El objeto DateTime es el camino a seguir en PHP y se debe alentar a todos los novatos a usarlo. Hasta ahora, soy el único que ha proporcionado esa respuesta. Por cierto, encuentro tu comentario un poco agresivo y no del todo en el espíritu de SO.
liquorvicar
@ Ahmetvardar Vea mi edición, aunque todo esto está en los documentos de PHP a los que proporcioné un enlace. Le recomiendo que comience a usar el objeto DateTime. Proporciona un excelente soporte para las fechas / horas, incluyendo las zonas horarias, etc
liquorvicar
18

Es muy importante establecer una zona horaria predeterminada para obtener el resultado correcto

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

Ayuda de conversión en línea: http://freeonlinetools24.com/timestamp

klit67
fuente
2
En ISO8601, Zse usa para indicar que es una hora UTC, por lo que la zona horaria debe establecerse enUTC
Gert van den Berg
11
<?php
$timestamp=1486830234542;
echo date('Y-m-d H:i:s', $timestamp/1000);
?>
sunil
fuente
66
Funciona sin la parte de división. De lo contrario, la fecha predeterminada es 1970.
Script47
6
$unixtime_to_date = date('jS F Y h:i:s A (T)', $unixtime);

Esto debería funcionar para.

Linus Gudn Jokela
fuente
1

La información en esta conversación me pareció tan útil que solo quería agregar cómo la descubrí usando la marca de tiempo de mi base de datos MySQL y un poco de PHP

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

La salida fue: 2017-03-03T08: 22: 36 + 01: 00

Muchas gracias Stewe, tu respuesta fue un eureka para mí.

Samuel Ramzan
fuente
0

Puedes hacer como .....

$originalDate = "1585876500";

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