Heroku-延时功能

时间:2018-08-01 03:23:47

标签: node.js heroku

我有一个功能,可以检查每分钟是否是上午7:30,如果是时间,它会向我发送一条短信。

但是由于我上传到heroku并且我的时区不同,所以我必须调整前面的时间,如下所示:

setInterval(function() {
  let date = new Date();
  if(date.getHours() == 11 && date.getMinutes() == 30){
    sendDaily()
  }
}, 60000)

但是,当我上传到heroku时,我的手机会随机收到警报。我也尝试使用schedule软件包来解决此问题,但是会发生相同的错误,该功能在应有的情况下无法运行。我也尝试过更改heroku上的时区,但这没有帮助,因为当我输入城市/位置时,它仍然提供相同的默认时区时间。

1 个答案:

答案 0 :(得分:0)

Heroku建立在AWS上,并在它认为合适的任何中心上创建容器。这意味着您的应用程序可以在AWS infrastructure map所示的世界任何地方运行。话虽这么说,在服务器上使用new Date会产生非常不同的结果,具体取决于它是在哪个服务器上创建的,而您无法控制。

您如何解决此问题?

您需要解耦new Date对操作系统的依赖性。

选项

  1. 您可以使用返回一天中标准时间的API,该API将为所有AWS容器创建一个单一的真实来源,无论它们位于何处。这里是Example

  2. 您可以手动设置时区,前提是所有AWS OS时钟均已同步。您可以使用momentmoment timezone

  3. 使用不是在全球范围内随机创建的专用服务器。像任何权衡取舍一样,如果您尝试扩展规模,则会产生自己的问题,但这是一个选择。