我正在尝试编写一个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时没有问题,我只需要帮助找出夏令时的解决方法,因为这超出了我的知识范围。
答案 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.js与moment-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时区标识符。
这里的主要优点是您可以用当地时间来表达您的工作时间,这将自动考虑夏令时的任何变化。换句话说,这些时间是在美国“东部时间”区域,而不是必须具体在“东部标准时间”或“东部夏令时”。