Obtener fecha local y UTC con PHP

A la hora de trabajar con fechas en PHP nos encontramos con un pequeño problema: la fecha del servidor, no es la misma que la del usuario…puede variar la hora de manera drástica.

Por ello, les comparto una pequeña solución: utilizar la fecha UTC en el servidor, y para los usuarios, convertir la fecha UTC a local, con sólo 2 sencillas funciones. De este modo, todos tendrían la hora exacta a la que se realizo determinada función (creación de un post, etc).

[codigo]function fecha_utc() {
date_default_timezone_set(«UTC»);
return date(«Y-m-d H:i:s», time());
}
//ejemplo
echo fecha_utc(); //retorna la fecha UTC

function fecha_local( $string, $format = ‘Y-m-d H:i:s’ ) {
$tz = ‘UTC’;
$datetime = date_create( $string, new DateTimeZone( $tz ) );
if ( ! $datetime ) {
return gmdate( $format, 0 );
}
//Cambiar America/Mexico_City por la zona horaria (local)
$datetime->setTimezone( new DateTimeZone( ‘America/Mexico_City’ ) );
$string_gmt = $datetime->format( $format );

return $string_gmt;
}

//ejemplo
echo fecha_local(fecha_utc()); //convierte la fecha UTC a local
//Si queremos sólo la fecha, sin hora, cambiamos un poco el formato…
echo fecha_local(fecha_utc(), ‘Y/m/d’); //Retorna año,mes y día 2016/07/04
[/codigo]

Ambas funciones se complementan.