世界时,夏令时和JavaScript

时间:2013-10-15 18:17:34

标签: javascript jquery datetime utc dst

我正在尝试编写一个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时没有问题,我只需要帮助找出夏令时的解决方法,因为这超出了我的知识范围。

2 个答案:

答案 0 :(得分: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;

关于这一点的难点在于您显示消息并期望它根据东部时间进行更改。如果用户弹出页面并将其保留到美国东部时间夏令时开始,该怎么办?你需要处理吗?如果它在美国东部时间差不多下午2点并弹出页面怎么样?几分钟后你是否需要弹出消息?

案例3

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

答案 1 :(得分: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.');
    }
});

请务必在time zone data builder中添加America/New_York区域的数据。这是美国东部时间的IANA时区标识符。

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