我有一个功能,可以检查每分钟是否是上午7:30,如果是时间,它会向我发送一条短信。
但是由于我上传到heroku并且我的时区不同,所以我必须调整前面的时间,如下所示:
setInterval(function() {
let date = new Date();
if(date.getHours() == 11 && date.getMinutes() == 30){
sendDaily()
}
}, 60000)
但是,当我上传到heroku时,我的手机会随机收到警报。我也尝试使用schedule
软件包来解决此问题,但是会发生相同的错误,该功能在应有的情况下无法运行。我也尝试过更改heroku上的时区,但这没有帮助,因为当我输入城市/位置时,它仍然提供相同的默认时区时间。
答案 0 :(得分:0)
Heroku建立在AWS上,并在它认为合适的任何中心上创建容器。这意味着您的应用程序可以在AWS infrastructure map所示的世界任何地方运行。话虽这么说,在服务器上使用new Date
会产生非常不同的结果,具体取决于它是在哪个服务器上创建的,而您无法控制。
您如何解决此问题?
您需要解耦new Date
对操作系统的依赖性。
选项
您可以使用返回一天中标准时间的API,该API将为所有AWS容器创建一个单一的真实来源,无论它们位于何处。这里是Example。
您可以手动设置时区,前提是所有AWS OS时钟均已同步。您可以使用moment和moment timezone
使用不是在全球范围内随机创建的专用服务器。像任何权衡取舍一样,如果您尝试扩展规模,则会产生自己的问题,但这是一个选择。