使用JavaScript在特定时区为DST设置偏移时间
如果当前DST在太平洋时区,我需要将时间补偿一小时。 无论用户当地的时区如何确定太平洋时区的当前夏令时状态?
这是迄今为止我所拥有的。 第4行中的“dst”只是一个函数的占位符,它会告诉我夏令时是否在该区域中处于活动状态。
function checkTime() {
var d = new Date();
var hour = d.getUTCHours();
var offset = dst ? 7 : 8; // is pacific time currently in daylight savings?
// is it currently 6 AM, 2 PM, or 10 PM?
if (hour === ((6 + offset) % 24) || hour === ((14 + offset) % 24) || hour === ((22 + offset) % 24)) {
// do stuff
}
}
checkTime();
您可以确切地确定的唯一真正的方法是,如果您有服务器上可用的DST信息(包括任何更新),您可以询问。 用户的PC甚至不需要安装时区信息。
然后你需要一个“动态”脚本来获得DST状态。
可能的方法:引用一个生成javascript的PHP / ASPX / JSP / CFM / ASP页面来设置一个变量,该变量指示DST是否处于活动状态,或者当前的分钟偏移量。
直接在您的(希望是动态的)页面中编写脚本。
使用AJAX / REST / JSON访问某个地方的日期/时间服务,可以告诉您时区/位置的DST状态或与UTC偏移的分钟数。
几分钟比几小时更好,因为夏令时抵消实际上在全世界范围内,而不是几小时。
我之前也在一个基于PHP的网站上应付这个“世界时钟”。 在JS中没有很好的方法来实现这一点,即便如此,你依赖于客户端的环境。 你真的需要用你正在使用的服务器端语言来完成这项任务。
如果碰巧你也在使用PHP,那么你可能会发现这个代码片段很有用:
function get_offset_with_DST($timezone_name) {
$default_timezone = date_default_timezone_get();
date_default_timezone_set($timezone_name);
$offset_with_DST = date('Z') / 3600;
date_default_timezone_set($default_timezone);
return $offset_with_DST;
}
然后在JS中:
<script>var offsetWithDST = <?= get_offset_with_DST('US/Pacific'); ?>;</script>
有关PHP中所有支持的时区名称的列表,请查看此页面。
在美国,目前DST的计算时间为三月的第二个星期日和十一月的第一个星期日。
为了计算DST开始的日期,我们首先计算当前年份,然后在3月份的第一个工作日进行计算,并基于此计算第二个星期日。 11月也是如此,最后是测试今天的日期是否在两个锚定日期之间。 正确时,dst变为“1”。
根据我的需要,日间级别的精度已经足够,但它可以建立更高的精度。
var dst = 0
var d = new Date();
var myYear = parseInt(d.getFullYear())
d.setFullYear(myYear , 2, 1);
var what_Weekday_Mar1 = d.getDay();
var DST_StartDay
switch(what_Weekday_Mar1) {
case 0:
DST_StartDay = 14
break;
case 1:
DST_StartDay = 13
break;
case 2:
DST_StartDay = 12
break;
case 3:
DST_StartDay = 11
break;
case 4:
DST_StartDay = 10
break;
case 5:
DST_StartDay = 9
break;
case 6:
DST_StartDay = 8
break;
}
var DST_on_Date = new Date()
DST_on_Date = DST_on_Date.setFullYear(myYear,2,DST_StartDay)
d.setFullYear(myYear , 10, 1);
var what_Weekday_Nov1 = d.getDay();
switch(what_Weekday_Nov1) {
case 0:
DST_EndDay = 1
break;
case 1:
DST_EndDay = 7
break;
case 2:
DST_EndDay = 6
break;
case 3:
DST_EndDay = 5
break;
case 4:
DST_EndDay = 4
break;
case 5:
DST_EndDay = 3
break;
case 6:
DST_EndDay = 2
break;
}
var DST_off_Date = new Date()
DST_off_Date = DST_off_Date.setFullYear(myYear,10,DST_EndDay)
var toDay = new Date();
/*if today is between Daylight Savings On and Off times */
if (today>DST_on_Date && today<DST_off_Date) {
dst = 1;
}
希望这可以帮助!
-RL
链接地址: http://www.djcxy.com/p/1647.html上一篇: Offset time for DST in one specific timezone using JavaScript