如何获取我的应用所在的当前时区

How do I get the current time zone where my app resides

这个问题困扰我好几个月了,我终于取得了一些进展。我正在编写一个应用程序,它会在东部时间上午 9 点和晚上 9 点的特定时间向我发送消息。当我 运行 它在本地运行时它完美运行,但是当我部署它时,我什么也得不到。我正在胡闹,然后我看到了这个 Heroku Logs。我的猜测是我的应用程序位于不同时区的服务器上,并且下面的代码运行时。永远不会满足条件,也不会发送任何内容。我现在的问题是,无论服务器位于哪个时区,有没有办法获取当前时间并进行比较?

const sendMessage = require('./sms-api.js');

const send = () =>{

    setInterval(()=>{

        var x = new Date().toLocaleTimeString();
        console.log(x);
    
       if(x === '11:00:10 AM')
       {
           console.log('match');
           return sendMessage('6178032176', 'Good Morning');
       }
       else if(x === '9:50:20 PM')
       {
           console.log('match');
           sendMessage('6178032176', 'Good Evening');
       }
    },1000)
}

send();

使用不同时区时,最好使用UTC,然后根据所需时区进行偏移。

获取 UTC 时间,然后根据所需时区进行偏移。

您还可以使用 moment-timezone 等专用库。
https://momentjs.com/timezone/docs/

如 Suyash 上面所说,您最好的选择是完全使用 UTC,并且仅在向用户显示时间时进行转换。您可以在日期和时间后附加 'Z' 以表明它们是通用的,而不是处理偏移量。

我发现最好的方法是使用 moment.js 和 moment-timezone.js。下面是一个允许您转换时间和日期的实现示例:https://github.com/aidanjrauscher/browser-timezone-conversions。这些库还可以非常方便地将任何日期或时间相关的用户输入从他们的本地时区转换回 UTC。

感谢您的帮助。我最终弄明白了。我改用这个 const time = new Date().toLocaleTimeString('en-US', { timeZone: 'America/New_York' });.