在PHP中处理国际时间


Handing International Time in PHP

关于使用国际时区的一个快速问题;格林尼治时间。

我有一个应用程序,需要发送电子邮件在特定的时间(早上6点)为每个人根据他们的时区GMT +-国际。我不知道如何用GMT来处理这个问题。时区。欢迎任何意见。

Naïvely,您可以收集(或以某种方式确定)每个用户的时区ID (tzid),并只需在每个UTC小时的顶部运行一个cron作业,检查这些区域的当前时间是否为06:00。

但这并不容易,因为有几个时区与UTC没有整小时的偏移,比如美国/St_Johns (UTC-03:30)和亚洲/加德满都(UTC+05:45),如果你只运行cron每小时,这些用户就不会收到任何电子邮件。因此,为了安全起见,您可能需要每隔15分钟运行一次cron。

但是由于cron作业通常在计划运行后几秒钟才启动,因此您不应该测试是否等于与06:00:00。此外,时区不要求以四分之一小时为增量(但谢天谢地,所有公认的时区都是以四分之一小时为增量),因此,您可能想要评估当前时间是否在某个窗口内。

例如,如果您每15分钟运行一次cron,则将该窗口设置为15分钟宽()。, 05:55 to 06:10)确保捕捉到边缘情况。理论上仍然有可能跳过cron运行…但是,如果没有存储额外的数据来表明某人是否已经发送了今天的电子邮件(如果没有,则弥补差异),这是您所能做的最好的事情。

您可以像下面这样使用php时区设置函数

作用(美国/Los_Angeles);

使用这个函数可以得到用户的时间。在此基础上,您可以发送电子邮件。

更多参考date_default_timezone_set

您可以运行cron检查每小时是否有一个用户在早上6点的某个地方。