Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通用时间、夏令时和JavaScript_Javascript_Jquery_Datetime_Utc_Dst - Fatal编程技术网

通用时间、夏令时和JavaScript

通用时间、夏令时和JavaScript,javascript,jquery,datetime,utc,dst,Javascript,Jquery,Datetime,Utc,Dst,我正在尝试编写一个JavaScript代码,它将在一天中的两个小时内显示某条消息。我们在东部标准时间,但我在使用世界时间方面没有问题,因为这使编写脚本变得更容易。到目前为止,我有这个,它的工作非常好,然而,我完全难住了与夏时制有关的工作 $(document).ready(function(){ var todaysDate = new Date(); var weekday = todaysDate.getDay(); var universalhour = today

我正在尝试编写一个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.');
        }
    }
}
});
$(文档).ready(函数(){
var todaysDate=新日期();
var weekday=todaysDate.getDay();
var universalhour=todaysDate.getUTCHours();
如果(工作日>=0){
如果(工作日=14){
if(通用小时<23){
$('div#announcements span')。追加('
打开'); } } } } 如果(工作日==5){ 如果(通用小时>=14){ if(通用小时<20){ $('div#announcements span')。追加('
打开'); } } } });
基本上,信息“Open”应该只在东部时间上午10点到晚上8点、星期日-星期四和东部时间上午10点到星期五下午4点之间显示


我与科技大学合作没有问题,我只是需要帮助找出夏令时的解决办法,因为这是我所不熟悉的领域。

案例1

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

var hour = todaysDate.getHours();
然后在所有测试中使用该变量

那就可以了

案例2

如果您正在编写JavaScript以在某个网络/internet连接结束时在客户机上运行,则需要将某些内容从服务器传递到客户机,以便JavaScript能够运行 说出东部时区的时间

因此,您可以在web页面中包含以下内容

<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>
其中最困难的部分是,您显示消息,并期望它根据东部时间进行更改。如果用户弹出页面并将其保留到EST中DST启动,该怎么办?你需要处理吗?如果美国东部时间下午2点左右,页面弹出怎么办?你必须在几分钟后弹出消息吗

案例3


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

这是使用库最容易做到的。用于:

$(文档).ready(函数(){
var now=moment().tz(“美国/纽约”);
var weekday=now.day();
var hour=now.hour();
var isOpen=(工作日>=0&&weekday=10&&hour<20)|
(工作日==5小时>=10小时<16小时);
if(等参线){
$('div#announcements span')。追加('
打开'); } });
确保包含来自的
美国/纽约
区域的数据。这是美国东部时间的IANA时区标识符


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

getDay
不是UTC版本,因此取决于位置,也许您的意思是
getUTCDay
。您可以检查DST是否在@jorgebg有效,它只适用于客户端机器上的本地时区。并不是每个地方都同时更改为DST,有些地方根本不更改。@jorgebg我使用这个+EST偏移量来编写脚本。发布一个答案,我会接受。哈哈,不,到最后一部分。不幸的是,我无法控制我的服务器,所以我只剩下这些我不太擅长的JavaScript攻击。别忘了,如果东部时区的DST规则发生变化,在未来的某个不确定的时间,事情将需要更新。@LeeMeador-好的观点。这就是为什么每年都有多个TZDB更新。幸运的是,在美国,他们倾向于提前宣布这些事情,但在世界某些地区,他们可以在短时间内做出改变。
 var hour = todaysDate.getUTCHours() + ESTOffset;
$(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.');
    }
});