0

只是一个关于使用国际时区和 GMT 的快速问题。

我有一个应用程序需要根据他们的时间/区域 GMT +- 在特定时间(早上 6 点)为国际上的每个人发送一封电子邮件。我不知道应该如何使用 GMT 和时区来处理这个问题。任何输入表示赞赏。

4

3 回答 3

1

天真地,您可以为每个用户收集(或以某种方式确定)一个时区 ID ( tzid ),然后只需在每个 UTC 小时的顶部运行一个 cron 作业,检查当前时间是否为 06:00 在这些区域中的任何一个.

不过,这并不容易,因为有几个时区与 UTC 没有整小时偏移,例如 America/St_Johns (UTC-03:30) 和 Asia/Kathmandu (UTC+05:45),以及如果您只每小时运行一次 cron,这些用户将不会收到任何电子邮件。因此,为了安全起见,您可能希望每一刻钟运行一次 cron。

但由于 cron 作业通常在计划运行几秒钟开始,因此您不应该在 06:00:00 测试是否相等。此外,时区不必四分之一小时为增量(但幸运的是,所有公认的时区都是),所以为了迂腐,您可能想要评估当前时间是否在某个窗口内。

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

于 2011-12-30T17:58:29.837 回答
1

您可以使用 php 时区设置功能,如下所示

date_default_timezone_set('America/Los_Angeles');

通过使用此功能,您可以获得用户的时间。基于此,您可以发送电子邮件。

更多参考date_default_timezone_set

于 2011-12-20T17:19:18.850 回答
0

如果您的一个用户存在于早上 6 点的某个地方,您可以运行一个 cron 每小时检查一次。

于 2011-12-20T17:12:59.880 回答