Cómo configurar fechas en diferentes zonas horarias con wordpress y advance custom fields [ACF]


Hola Dev’s recientemente estoy desarrollando un sitio web en wordpress donde los usuarios pueden entrar en diferentes zonas horarias y me tope con el problema que usando el plugin de advance custom fields [ACF] con el campo de tipo date time picker, la hora no se guarda con la zona horaria configurada en el admin de wordpress.

Estuve investigando como convertir la zona horaria usando solo las funciones de wordpress ya que la documentación recomienda usar wp_date y no usar la función de php date_default_timezone_set

Pero advance custom fields a la hora de guardar la fecha y tratar de convertirla tomaba la fecha como la hora mundial y no como la hora configurara en mi administrador de wordpress.

Entonces tuve que crear una función que agrega la hora con su zona horaria y la zona horaria que deseo convertir.

<?php
    
    /*
    ** Author: Herel Odin
    ** Site: https://herelodin.com
    ** Version: 0.0.1
    */

    function convertTimeZone($fecha = '2020-10-20 12:00',$format = false){
        setlocale(LC_TIME, 'es_ES');
        $user_id = get_current_user_id();
        $ubicacion = get_field('ubicacion','user_'.$user_id);
        if(empty($ubicacion))
            $ubicacion = 'America/Mexico_City';
        $date = new DateTime($fecha,new DateTimeZone('America/Mexico_City'));
        $tz = new DateTimeZone($ubicacion);
        $date->setTimezone($tz);
        if($format)
            return $date->format($format);
        return strftime("%d de %B %Y %H:%M", strtotime($date->format('d F Y H:i:s') )); 
    }

?>

la función puede recibir 2 parámetros para convertir la fecha, tomando en cuenta que nuestro usuario tiene un campo de zona horaria.

  • 1.- Fecha en el formato “año-mes-dia hora-minutos-segundos”
  • 2.- Formato que debe retornar si este campo viene en falso no restornara un la fecha con nombre por ejemplo: 20 de octubre 2020 12:00

Como puedes observar en el código la fecha que le pasamos le indicamos cual es su zona horaria local en este caso es Ciudad de Mexico y buscamos en la cuenta del usuario un campo llamado ubicación que contiene la zona horaria de su región por ejemplo “America/Santiago” indicando que debe convertir la hora de méxico a hora de chile.

Puedes consultar mas zonas horarias aquí

Espero y esta función te sea de gran ayuda yo me detuve como 1 día tratando de buscar una solución rápida con wordpress y advance custom fields

Si deseas puedes hacer un donativo de 1 dolar para seguir manteniendo y subir más contenido en este sitio.