你如何确定当前是哪个时区的凌晨12点?

3

我正在处理一个cron任务,向全球数百名用户发送报告。这个cron应该在每个用户的时区凌晨12点准确发送电子邮件给他们。谢谢。

3个回答

3
您需要一份用户所在时区及其是否使用夏令时的清单。完整的时区列表请参见此维基百科文章
然后,每隔15分钟,您需要让cron运行一个脚本,向当前时区偏移量中的所有用户发送邮件。例如,在UTC + 5:45时向“加德满都”时区中的所有用户发送您的邮件。

不仅加德满都,德黑兰也是+3:30,澳大利亚的阿德莱德和达尔文是+9:30,德里和孟买是+5:30。基本上,时区通常以15分钟为增量。此外,基本上,时区处理很糟糕! - Glen
是的,我记得去年有个国家的领导人通过命令随意更改了时区 - 不确定那个变化被关心时区的人们认真对待了多少!换句话说,我不知道在哪里规定时区必须在15分钟的边界上。 - Dominic Rodger
是的,Glen时区处理真的很糟糕。感谢你让我感觉好一些。 - jedt
@Dominic 这并不是一成不变的,他们可以使用不同于15分钟的时间间隔,这只是目前所有时间间隔所使用的。由于这基本上是一个政治决定,明天可能会有所不同。 - Glen
@TheTXI 思考一下,电子邮件并不能保证邮件立即送达。仅仅因为你在午夜发送邮件并不意味着它会在午夜被送达,可能需要几个小时才会出现在你的收件箱中。所以你可能是对的,担心15分钟并没有太多意义。 - Glen
显示剩余4条评论

2
Your Time | Timezone You Need
-----------------------------
12:00am     0
1:00am      -1
2:00am      -2
3:00am      -3
4:00am      -4
5:00am      -5
...
12:00pm     +/- 12
1:00pm      +11
2:00pm      +10
3:00pm      +9
...
------------------------------

你应该能够看到这里开始出现了一种模式。这个模式最终应该是像这样的:时区差异 =(12-您当前的小时)


1
不要忘记所有使用15、30和45分钟偏移量的地方。 - Glen
谢谢,你帮我从另一个角度思考了。我认为,与其进行许多令人困惑的数学计算,不如为每个时区的每个小时硬编码if语句。 - jedt
很好的观点,Glen。而且,drikoda,我并不是在倡导一定要硬编码所有内容,但如果你拥有一个足够大和详尽的列表或数据库表(包括像我所做的每 15 分钟分割而不是每小时),那么如果这最终是你不会想死的最佳方法,那就这样吧。 - TheTXI

0

确定你所在的时区:

time("O");

找出你所在的时间:

time("H:i")

进行一些魔法计算,以确定您应该添加还是减去时间才能到达午夜,然后添加或减去您的时间与午夜之间的差异以获取时区差异,并将其添加到您自己的时区。大功告成。

编辑:请参见@TheTXI的答案,了解所涉及的“魔法”


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接