Conversione di un timestamp UNIX in una stringa di data formattata


183

Utilizzando PHP, voglio convertire i timestamp UNIX in stringhe di date simili a questo: 2008-07-17T09:24:17Z

Come faccio a convertire un timestamp, come 1333699439a 2008-07-17T09:24:17Z?

Risposte:


321

Prova in gmdatequesto modo:

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

53
Si prega di non gmdate()restituire la data / ora in GMT. date()restituirà la data / ora locale.
Matt K,

5
Il commento sopra non ha senso in questo contesto. L'uso della data con il secondo parametro come timestamp, come mostrato nella risposta, non stampa la data nel fuso orario locale. La data verrà stampata con le informazioni sul fuso orario ignorate, poiché il timestamp non ha informazioni sul fuso orario. gmdate e date con il secondo parametro timestamp come 1333699439 stamperanno la stessa data e ora.
Tinus Tate,

1
@MattK: il che ha senso, poiché Z indica UTC. Tinus: i timestamp Unix non contengono offset del fuso orario. datee gmdatel'output differirà in base alla variabile TZ (almeno su * nix)
Gert van den Berg,


Sarebbe anche bello se questa risposta includesse la soluzione per il problema opposto, convertendo una data formattata in ora UNIX.
Olle Härstedt,

117

usa la funzione data date ( string $format [, int $timestamp = time() ] )

Utilizza date('c',time())come formato per convertire in data ISO 8601 (aggiunto in PHP 5) -2012-04-06T12:45:47+05:30

usare date("Y-m-d\TH:i:s\Z",1333699439)per ottenere2012-04-06T13:33:59Z

Ecco alcuni dei formati supportati dalla funzione data

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

come posso convertire il timestamp specifico con 'c'? per esempio 1333699439
Utku Dalmaz,

questa data non funziona ("Ymd \ TH: i: s \ Z", 1333699439) ho ricevuto 2012-04-06EDT04: 03: 59-14400
Utku Dalmaz

@Ahmet - Nota l'uso di virgolette doppie e singole quando si definisce la stringa
Mark Baker

1
@ user2060451 qualsiasi cosa preceduta da una barra rovesciata viene mostrato come carattere letterale nella stringa temporale risultante
verbumSapienti

1
@ user2060451: Z dovrebbe indicare l'ora UTC (nel qual caso si dovrebbe usare gmdate ...) Controlla le informazioni ISO8601 sulla tua risorsa di ricerca preferita.
Gert van den Berg,

56

Supponendo che tu stia utilizzando PHP5.3, il modo moderno di gestire le date è tramite la classe DateTime nativa . Per ottenere l'ora corrente puoi semplicemente chiamare

$currentTime = new DateTime();

Per creare un oggetto DateTime da un timestamp specifico (ovvero non ora)

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

Per ottenere una stringa formattata è quindi possibile chiamare

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

Vedi la pagina del manuale qui


1
come posso convertire il timestamp specifico con questo? per esempio 1333699439
Utku Dalmaz,

@Norse Ovviamente ho letto il suo post. Tutte le informazioni di cui aveva bisogno erano nel mio post. Tutto quello che doveva fare era leggere i documenti PHP per l'oggetto DateTime. Ho modificato il mio post per renderlo ancora più chiaro. L'oggetto DateTime è la strada da percorrere in PHP e tutti i neofiti dovrebbero essere incoraggiati a usarlo. Fino ad ora, sono l'unico a cui è stata fornita quella risposta. Tra l'altro trovo il tuo commento un po 'aggressivo e non del tutto nello spirito di SO.
liquorvicar,

@Ahmetvardar Vedi la mia modifica anche se tutto questo è nei documenti PHP a cui ho fornito un link. Vi esorto caldamente a iniziare a utilizzare l'oggetto DateTime. Fornisce un eccellente supporto per date / orari inclusi fusi orari, ecc.
liquorvicar,

18

È molto importante impostare un fuso orario predefinito per ottenere il risultato corretto

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

Guida alla conversione online: http://freeonlinetools24.com/timestamp


2
In ISO8601, Zviene utilizzato per indicare che è un'ora UTC, quindi il fuso orario deve essere impostato suUTC
Gert van den Berg,

11
<?php
$timestamp=1486830234542;
echo date('Y-m-d H:i:s', $timestamp/1000);
?>

6
Funziona senza la parte di divisione. Altrimenti la data predefinita è 1970.
Script47


1

Ho trovato le informazioni in questa conversazione così utili che volevo solo aggiungere come ho capito usando il timestamp dal mio database MySQL e un po 'di PHP

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

L'output è stato: 2017-03-03T08: 22: 36 + 01: 00

Grazie mille Stewe, la tua risposta è stata un eureka per me.


0

Puoi fare come .....

$originalDate = "1585876500";

echo $newDate = date("Y-m-d h:i:sa", date($originalDate));
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.