0

我正在尝试编写一个 JavaScript 代码,该代码将在一天中的两个小时之间显示特定消息。我们处于东部标准时间,但我使用通用时间没有问题,因为这样可以更轻松地编写脚本。到目前为止,我有这个并且效果很好,但是,我完全不知道如何使用夏令时。

$(document).ready(function(){
    var todaysDate = new Date();
    var weekday = todaysDate.getDay();
    var universalhour = todaysDate.getUTCHours();

if (weekday >= 0) {
    if (weekday <= 4) {
        if (universalhour >= 14) {
            if (universalhour < 23) {
                $('div#announcements span').append('<br />Open.');
            }
        }
    }
}
if (weekday == 5) {
    if (universalhour >= 14) {
        if (universalhour < 20) {
            $('div#announcements span').append('<br />Open.');
        }
    }
}
});

基本上,“开放”消息应仅在美国东部标准时间上午 10 点至晚上 8 点之间、周日至周四和美国东部标准时间上午 10 点至周五下午 4 点之间显示。

我与 UST 合作没有问题,我只需要帮助找出夏令时的解决方法,因为这超出了我的知识领域。

4

2 回答 2

0

使用库最容易做到这一点。将moment.jsmoment-timezone一起使用:

$(document).ready(function(){

    var now = moment().tz("America/New_York");
    var weekday = now.day();
    var hour = now.hour();

    var isOpen = (weekday >= 0 && weekday <= 4 && hour >= 10 && hour < 20) || 
                 (weekday == 5 && hour >= 10 && hour < 16);

    if (isOpen) {
        $('div#announcements span').append('<br />Open.');
    }
});

请务必包含America/New_York来自时区数据构建器的区域数据。这是美国东部时间的 IANA 时区标识符。

这里的主要优点是您可以用本地时间表示您的时间,这将自动考虑夏令时的任何变化。换句话说,这些时间是在美国“东部时间”区域,而不是必须具体地在“东部标准时间”或“东部夏令时间”。

于 2013-10-15T18:55:27.460 回答
0

情况1

如果您的计算机设置为在东部时区运行并且您使用此更改:

var hour = todaysDate.getHours();

然后在所有测试中使用该变量。

那应该照顾它。

案例2

如果您正在编写 JavaScript 以在某个网络/互联网连接结束时在客户端计算机上运行,​​则需要从服务器向客户端传递一些内容,以便 javascript 可以判断东部时区的时间。

所以你可以在你的网页中包含以下内容

<script>
   // The global value is filled in by the server based on current time on your server which is
   //  running EST or can calculate it. That code might be PHP or Java or Ruby or ...
   var ESTOffset = 5.0; 
</script>

然后你必须使用这样的计算:

 var hour = todaysDate.getUTCHours() + ESTOffset;

困难的部分是您显示消息并期望它根据东部时间而改变。如果用户弹出页面并在 EST 开始 DST 之前将其保留怎么办?你需要处理吗?如果它在美国东部标准时间快到下午 2 点并且页面弹出怎么办?几分钟后你必须弹出消息吗?

案例3

如果您需要在运行任意时区的计算机上计算 EST 时间(包括 DST),您就有麻烦了。javascript 中没有任何内容可以让您问“美国纽约几点了?”。您将需要一些了解规则的库,并且如果 EST 中的规则发生更改,您将必须更新(或确保更新)。或者您可以自己添加一些代码,这些代码知道 DST 何时以 EST 开始和结束并进行数学运算。当然,如果规则发生变化,您必须更新代码。

于 2013-10-15T18:30:25.573 回答