通用时间、夏令时和JavaScript
我正在尝试编写一个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
$(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.');
}
});