在美国,DST 目前计算为 3 月的第 2 个星期日和 11 月的第 1 个星期日之间的时间。
要计算 DST 开始的日期,我们首先计算当前年份,然后计算 3 月 1 日是哪个工作日,并据此计算第 2 个星期日。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