按 ‘ DST ’ 标签归档

判断夏时制的JavaScript代码

“三月的第二个星期日”这种表达,用计算机语言说起来很复杂的。所以不辞辛苦写了段代码,用来判断世界的其他地方现在是不是夏时制。

函数需要两个参数:

  • timezone是想要计算的地方所在的时区,是一个数字,用正数表示东半球,用负数表示西半球,零表示本初子午线附近。此数字可以是小数,为了照顾加德满都这种“东5小时零45分钟”的时区。
  • summerrule是所需要使用的规则,此参数是一个字符串,目前这段JavaScript代码支持两种规则:“EUR”和“USA”。

如果所计算地点的当前时间,按照规则被认为是落在夏时制期间,则函数返回true,否则返回false。

function isDaylightSaving(timezone, summerrule)
{
    var today = new Date();
    var localtime = today.getTime() + timezone * 3600 * 1000;
    var localday = new Date(localtime);
    var hour = localday.getUTCHours();	// 0-24
    var month = localday.getUTCMonth();	// 0-11
    var date = localday.getUTCDate();	// 1-31
    var wkday = localday.getUTCDay();	// 0-6
    var summer = false;
    if (summerrule == "EUR") {
        if (month > 2 && month < 9)
            summer = true;
        else if (month == 2 && date - wkday > 24 && (wkday != 0 || hour > 0))
            summer = true;
        else if (month == 9 && (date - wkday < 25 || wkday == 0 && hour < 1))
            summer = true;
    } else if (summerrule == "USA") {
        if (month > 2 && month < 10)
            summer = true;
        else if (month == 2 && (date > 14 || date - wkday > 7 && (wkday != 0 || hour > 1)))
            summer = true;
        else if (month == 10 && (date < 8 && (date - wkday < 1 || wkday == 0 && hour < 2)))
            summer = true;
    }
    return summer;
}