判断夏时制的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; }