Creo que está en el camino correcto con GMT (UTC). Use UTC como su representación canónica de indicación de fecha y hora cada vez que tenga algún evento que ocurra (o haya ocurrido) en un momento específico en un punto en el tiempo. UTC no se ve afectado por las reglas de horario de verano, por lo que sirve como una gran representación de punto en el tiempo sin ambigüedades.
Una vez que tenga una estrategia para la representación inequívoca de la fecha/hora del evento, entonces se puede resolver muy fácilmente el problema de localizar fecha/horas basado en que zona horaria que tiene más sentido a aceptar de sus usuarios (o mostrarles) Probablemente también necesite conocer y almacenar la zona horaria del evento, pero, debido a que está almacenando la fecha/hora del evento real en UTC, puede ubicarlo fácilmente en la zona horaria del usuario si es más relevante. a ellos en cualquier caso de uso dado.
Esta localización generalmente se realiza con una biblioteca de zona horaria proporcionada por su SDK (por ejemplo, Java tiene java.util.Calendar) o como una extensión de terceros (por ejemplo, Python tiene pytz). Estoy seguro de que PHP tiene un equivalente, pero no estoy tan familiarizado con sus bibliotecas.
Estas bibliotecas generalmente se crean sobre una base de datos de reglas como Olson Zoneinfo DB. Estas reglas pueden cambiar con bastante frecuencia, por lo que debe estar al tanto de las actualizaciones de la base de datos subyacente, especialmente si está desarrollando una aplicación realmente global. Sin embargo, hacen un buen trabajo al externalizar las reglas de zona horaria esotéricas y nebulosas para que pueda (en teoría) actualizar la base de datos de reglas sin tener que realizar una actualización importante de su entorno de ejecución o realizar cambios de código significativos cuando las reglas DST en un cambio de área particular.
No es el problema más fácil del mundo y huele mal que tenemos que hacerlo, pero una vez que lo ha hecho un par de veces y asimila la separación de preocupaciones entre el almacenamiento exacto de la representación en un punto en el tiempo vs. de localización, entonces se convierte en segunda naturaleza.
¿necesita ejecutarlo en el momento preciso o en cualquier momento, siempre que se ejecute regularmente en algún intervalo? – dusoft
día de la semana (no día, mes y año), zona horaria (personas en diferentes zonas horarias que comparan el programa?), Y dst? esto se almacena en mysql? – OIS