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?

Respuestas:


321

Intenta gmdateasí:

<?php
$timestamp=1333699439;
echo gmdate("Y-m-d\TH:i:s\Z", $timestamp);
?>

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

¿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í


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


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

66
Funciona sin la parte de división. De lo contrario, la fecha predeterminada es 1970.
Script47


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í.


0

Puedes hacer como .....

$originalDate = "1585876500";

echo $newDate = date("Y-m-d h:i:sa", date($originalDate));
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.