Ingobernable/OkuPanel

Corrección de zona horaria

Closed this issue · 2 comments

Los eventos publicados en https://hacklab.ingobernable.net/eventos/ se muestran con una hora de retraso en https://ingobernable.net/calendario-de-actividades/. Es posible que el origen de los otros ics (zimbra) esté mal configurado, en cuyo caso, si se corrige el origen, saldrán todos desfasados una hora. Si fuera así, ¿cómo se corrige?

Los eventos del hacklab vienen con:

DTSTART:20180206T180000Z

y los de Zimbra con:

DTSTART;TZID="Europe/Brussels":20171213T190000

En el primero, no hay TZID, pero al acabar en Z, indica que la hora es GMT. En el segundo, viene en GMT, pero indica la zona horaria de visutalizacion. En cualquier caso, hay que establecer la zona local. ¿Cómo? Bueno, sacado de este enlace, hay un bug en WP que dificulta tener la verdadera zona, y se ha desarrollado la siguiente clase:

class WpDateTimeZone extends \DateTimeZone {

    /**
     * Determine time zone from WordPress options and return as object.
     *
     * @return self
     */
    public static function getWpTimezone() {

        $timezone_string = get_option( 'timezone_string' );

        if ( ! empty( $timezone_string ) ) {
            return new self( $timezone_string );
        }

        $offset  = get_option( 'gmt_offset' );
        $hours   = (int) $offset;
        $minutes = ( $offset - floor( $offset ) ) * 60;
        $offset  = sprintf( '%+03d:%02d', $hours, $minutes );

        return new self( $offset );
    }
}

Por ello, con el resultado con DTSTART:20180206T180000Z sería algo así como:

$OFFSET=getWpTimezone();

...

$DTSTART='20180206T180000Z';
$TZID=$OFFSET;
$date=new \DateTime($DTSTART); // La Z no influye
$date->setTimezone(new DateTimeZone($TZID));

En el otro caso,

DTSTART;TZID="Europe/Brussels":20171213T190000

es igual, salvo que $TZID es "Europe/Brussels", y no $OFFSET.

Acabo de poner un argumento opcional " OFFSET=1" a cada linea de ICS en la config de nuestro okupanel. Ahora los eventos de nuestro WP llevan +1h de offset, y he vuelto a poner la buena zona horaria en el WP, por lo que debería estar todo bien ahora. ¿Puedes comprobar un poquito que todo este bien a nivel de horarios? Puede que no parse bien los ICS.. pero no tengo mucho tiempo para mirarlo en detalles ahora, sorry :S Si quieres proponer un push, eres más que bienvenido ;) Mil gracias!