所以我要澄清为什么我要这样做:我需要在用户所在时区的晚上7点时向用户发送推送通知。
对于每个已注册的设备,我都有一个时区字符串,如"Europe/Paris"。
我正在创建一个每小时运行一次的后台作业。它应该获取晚上7点的用户列表,并向他们发送通知。
所以我想回答的问题是:
"现在到底是晚上7点在哪"
编辑重要的是要获得时区,即使它的格式不像"Europe/Paris",我可以用数组手动进行转换。
Javascript中没有内置支持将"标准"时区名称(例如Europe/London
)转换为时区偏移量。
你提到推送通知,所以这表明你不是在浏览器中运行。如果你正在使用Node.js,有一个很好的库,我用过叫做timezone
,它使用一组本地时区规范文件来处理时区之间的转换。
请注意,时区规格确实有时会发生变化,例如,当一个国家政府在几乎没有通知的情况下决定他们今年不使用夏令时。因此,保持本地映射的最新状态是至关重要的。
可能有一种更简单的方法来做到这一点,但是要有一个具有时区的用户数据库。然后在通知服务器和该时区之间设置一个小时的时差。因此,您的服务器是太平洋时间,而时区是东部,它将有3的差异。
使用您想要的时间与服务器上的时间之差来确定时区。你想要16:xx,它是13:xx,你得到+3小时的差异,使用它来查找时区,然后推送到与该时区相关的所有用户。
可能有一个更简单的方法,但这种方法是真正的简单的解决方案,需要一个数据库和一点sql知识。
编辑:如果你不介意使用web api的时间延迟,你应该看看这个:https://developers.google.com/maps/documentation/timezone/
哎呀,数字与时区不一致,谢谢Trent