2011-12-28 19 views
79

Come posso ottenere il timestamp UTC/GMT +/- utilizzando la funzione di data() di PHP? Ad esempio, se provoottenere ora UTC in PHP

date("Y-m-d H:i:s", time()); 

Otterrò il timestamp di Unix; ma ho bisogno di ottenere il timestamp UTC/GMT con stringa GMT/UTC +/- 0400 o GMT/UTC +/- 1000 in base ai tempi locali.

+0

@JeffPuckettII GMT non cambia per l'ora legale. Il Regno Unito passa da GMT a BST in estate, ma GMT rimane lo stesso e corrisponde sempre a UTC. – Lewis42

risposta

32
$time = time(); 
$check = $time+date("Z",$time); 
echo strftime("%B %d, %Y @ %H:%M:%S UTC", $check); 
+1

questa è la risposta giusta, peccato che non sia valutato tanto quanto le altre risposte –

+3

@AlainTiemblo non del tutto; devi sottrarre l'offset per farlo funzionare – sanmai

84

Utilizzando gmdate restituirà sempre una data GMT. La sintassi è la stessa di date.

+0

@AlainTiemblo non funziona: gmdate ("U") == date ("U") – sanmai

+8

@sanmai: un timestamp Unix è per definizione sempre UTC. https://en.wikipedia.org/wiki/Unix_time –

+0

@ nikc.org: Il problema è che gmdate ("U"), restituisce lo stesso time() che non è il timestamp UTC se il fuso orario del sistema server è diverso. L'unico modo in cui ero in grado di ottenere un timestamp reale basato su UTC era strtotime (gmdate ("M d YH: i: s")), che è diverso da gmdate ("U"), quando il fuso orario del tuo server è diverso da UTC – bksi

6

altro che chiamare gmdate è anche possibile inserire questo codice prima del vostro resto del codice:

<?php 
date_default_timezone_set("UTC"); 
?> 

che renderà resto la data di chiamate/relativi al tempo di utilizzare GMT/UTC fuso orario.

5

È possibile utilizzare gmmktime funzione senza argomenti per ottenere il timestamp UTC corrente:

$time = gmmktime(); 
echo date("Y-m-d H:i:s", $time); 

gmmktime funziona solo se il vostro tempo server utilizza UTC. Ad esempio, il mio server è impostato su US/Pacific. la funzione elencata sopra echos indietro nel tempo del Pacifico.

62

Un semplice gmdate() sarà sufficiente

<?php 
print gmdate("Y-m-d\TH:i:s\Z"); 
+2

Questo è semplice, diretto, e le opere come un fascino. Grazie! –

+1

Brillante! così semplice e funziona alla grande Grazie – DrBorrow

+1

hai salvato la mia giornata, grazie mille! – silviagreen

30

Come previously answered here, a partire da PHP 5.2.0 è possibile utilizzare la classe DateTime e specificare il fuso orario UTC con un'istanza di DateTimeZone.

Il DateTime __construct() documentation suggerisce di omettere il primo parametro quando si crea un'istanza DateTime per ottenere l'ora corrente.

$date_local = new \DateTime(); 
$date_utc = new \DateTime(null, new \DateTimeZone("UTC")); 

echo $date_local->format(\DateTime::RFC850); # Saturday, 18-Apr-15 13:23:46 AEST 
echo $date_utc->format(\DateTime::RFC850); # Saturday, 18-Apr-15 03:23:46 UTC 
0

È possibile utilizzare seguente per ottenere il tempo UTC:

date_default_timezone_set('Asia/Calcutta'); 

$current_date = date("Y/m/d g:i A"); 

$ist_date = DateTime::createFromFormat(
         '"Y/m/d g:i A"', 
         $current_date, 
         new DateTimeZone('Asia/Calcutta') 
        ); 

$utc_date = clone $ist_date; 
$utc_date->setTimeZone(new DateTimeZone('UTC')); 

echo 'UTC: ' . $utc_date->format('Y-m-d g:i A'); 
0
/** 
    * Converts a local Unix timestamp to GMT 
    * 
    * @param int Unix timestamp 
    * @return int 
    */ 
    function local_to_gmt($time = '') 
    { 
     if ($time === '') 
     { 
      $time = time(); 
     } 

     return mktime(
      gmdate('G', $time), 
      gmdate('i', $time), 
      gmdate('s', $time), 
      gmdate('n', $time), 
      gmdate('j', $time), 
      gmdate('Y', $time) 
     ); 
    } 
9
date("Y-m-d H:i:s", time() - date("Z")) 
0

con lo spago GMT/UTC +/- 0400 o GMT/UTC +/- 1000 in base agli orari locali

Il tuopersonalizzato manca solo O per darti gli offset del fuso orario dall'ora locale.

differenza di tempo di Greenwich (GMT) in ore Esempio: +0200

date_default_timezone_set('America/La_Paz'); 
echo date('Y-m-d H:i:s O'); 

2018-01-12 12:10:11 -0400

Tuttavia, per massima portabilità/interoperabilità, raccomanderei l'utilizzo del formato data ISO8601c

date_default_timezone_set('America/La_Paz'); 
echo date('c'); 

2018-01-12T12: 10: 11-04: 00

date_default_timezone_set('Australia/Brisbane'); 
echo date('c'); 

2018-01-13T02: 10: 11 + 10: 00

Puoi utilizzare anche gmdate e la stringa di fuso orario sarà sempre +00:00

date_default_timezone_set('America/La_Paz'); 
echo gmdate('c'); 

2018-01-12T16: 10: 11 + 00: 00

date_default_timezone_set('Australia/Brisbane'); 
echo gmdate('c'); 

2018-01-12T16: 10: 11 + 00: 00

Problemi correlati