2011-12-28 65 views
79

¿Cómo puedo obtener el sello de hora UTC/GMT +/- usando la función de fecha de PHP()? Por ejemplo, si intentoobtener hora UTC en PHP

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

Voy a obtener la marca de tiempo Unix; pero necesito obtener la marca de tiempo UTC/GMT con la cadena GMT/UTC +/- 0400 o GMT/UTC +/- 1000 según los tiempos locales.

+0

@JeffPuckettII GMT no cambia con el horario de verano. El Reino Unido cambia de GMT a BST en verano, pero GMT permanece igual y siempre coincide con UTC. – Lewis42

Respuesta

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

esta es la respuesta correcta, es una lástima que no se califica tanto como las otras respuestas –

+3

@AlainTiemblo no del todo; necesita restar el desplazamiento para que funcione – sanmai

84

El uso de gmdate siempre devolverá una fecha GMT. La sintaxis es la misma que para date.

+0

@AlainTiemblo no funciona: gmdate ("U") == date ("U") – sanmai

+8

@sanmai: una marca de tiempo Unix es, por definición, siempre UTC. https://en.wikipedia.org/wiki/Unix_time –

+0

@ nikc.org: El problema es que gmdate ("U"), devuelve lo mismo que time() que no es UTC timestamp si la zona horaria de su sistema de servidor es diferente. La única forma en que pude obtener la marca de tiempo basada en UTC real fue strtotime (gmdate ("M d YH: i: s")), que es diferente que gmdate ("U"), cuando la zona horaria del sistema del servidor es diferente de UTC – bksi

6

Aparte de llamar gmdate también se puede poner este código antes de su descanso del código:

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

que hará que resto de sus llamadas de fecha/tiempo relacionados a utilizar GMT/UTC zona horaria.

5

Puede utilizar gmmktime función sin argumentos para obtener la fecha y hora UTC actual:

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

gmmktime sólo funcionará si su hora de servidor utiliza UTC. Por ejemplo, mi servidor está configurado en US/Pacific. la función enumerada arriba echos atrás hora del Pacífico.

62

Un simple gmdate() será suficiente

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

Esto es simple, directo, y funciona como un encanto. ¡Gracias! –

+1

¡Brillante! tan simple y funciona genial Gracias – DrBorrow

+1

que salvó mi día, muchas gracias! – silviagreen

30

Como previously answered here, a partir de PHP 5.2.0 se puede utilizar la clase DateTime y especifique la zona horaria UTC con una instancia de DateTimeZone.

El DateTime __construct() documentation sugiere omitir el primer parámetro al crear una instancia de DateTime para obtener la hora actual.

$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

Puede utilizar estos procedimientos para obtener la hora 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 una cuerda GMT/UTC +/- 0400 o GMT/UTC +/- 1000 según los horarios locales

Su format personalizado solo falta O para darle los desplazamientos de la zona horaria de la hora local.

diferencia a la hora de Greenwich (GMT) en horas Ejemplo: +0200

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

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

Sin embargo, para maximizar la portabilidad/interoperabilidad, recomendaría usar el formato de fecha 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

También puede usar gmdate y la cadena de desplazamiento de la zona horaria siempre será +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

Cuestiones relacionadas