2011-10-28 27 views
5

He visto algunas preguntas sobre esto pero no una respuesta clara ... strtotime() usará la zona horaria predeterminada establecida para PHP al convertir la cadena a una marca de tiempo de unix.force php strtotime para usar UTC

Sin embargo, quiero convertir una cadena a la marca de tiempo de Unix en UTC. Como no hay un parámetro para hacerlo, ¿cómo puede hacerse esto?

La cadena que intento convertir es: 2011-10-27T20: 23: 39, que ya se encuentra en UTC. Quiero representar eso como una marca de tiempo de Unix también en UTC.

Gracias

+0

Considere también el uso de 'new DateTimeZone ('UTC');', consulte http://stackoverflow.com/a/34651091/1066234 –

Respuesta

5

Establecer la zona horaria por defecto del sistema antes de realizar la llamada strtotime:

date_default_timezone_set('UTC'); 
echo strtotime('2011-10-27T20:23:39')."\n"; 

// Proof: 
print_r(getdate(strtotime('2011-10-27T20:23:39'))); 

// IMPORTANT: It's possible that you will want to 
// restore the previous system timezone value here. 
// It would need to have been saved with 
// date_default_timezone_get(). 

See it in action.

+0

¿Eso causaría problemas con el resto del script? ¿Supongo que podría volver a configurarlo después? – Brian

+0

@Brian: podría causar problemas, sí. Pero siempre que lo restablezca, no habrá problema. – Jon

10

Me doy cuenta de que esta pregunta es muy antigua, pero encontré otra opción que puede ser útil. En lugar de establecer y luego revertir la zona horaria del php, se puede especificar la zona horaria como parte de la cadena que se pasa a strtotime así:

echo date_default_timezone_get(); 
output: America/Chicago 

echo gmdate('Y-m-d H:i:s', strtotime('2011-10-27T20:23:39')); 
output: 2011-10-28 01:23:39 

echo gmdate('Y-m-d H:i:s', strtotime('2011-10-27T20:23:39 America/Chicago')); 
output: 2011-10-28 01:23:39 

echo gmdate('Y-m-d H:i:s', strtotime('2011-10-27T20:23:39 UTC')); 
output 2011-10-27 20:23:39 

Nota: Estoy en PHP 5.5.9, pero esto debería funcionar en cualquier versión de php.

+1

Esta respuesta es mucho más preferible a la respuesta aceptada. +1 – Druckles

+2

Esto es más fácil pero debes tener cuidado con la entrada del usuario. Si solo envía lo que ha escrito un usuario, nunca se sabe si van a incluir la zona horaria o algo que arruinará la cadena. –