- \r
- thisYearSDays = nextYearSDays = 90;\r
- thisYearWDays = nextYearWDays = 304;\r
- \r
- thisYearSDays = calcLeapYear(now.getFullYear(), thisYearSDays);\r
- thisYearWDays = calcLeapYear(now.getFullYear(), thisYearWDays);\r
- nextYearSDays = calcLeapYear(now.getFullYear() + 1, nextYearSDays);\r
- nextYearWDays = calcLeapYear(now.getFullYear() + 1, nextYearWDays);\r
- \r
- thisYearSDays = subToSunday(thisYearS, now.getFullYear(), thisYearSDays, 59);\r
- thisYearWDays = subToSunday(thisYearW, now.getFullYear(), thisYearWDays, 273);\r
- nextYearSDays = subToSunday(nextYearS, now.getFullYear() + 1, nextYearSDays, 59);\r
- nextYearWDays = subToSunday(nextYearW, now.getFullYear() + 1, nextYearWDays, 273);\r
- \r
- daylightsavingSummer = new Date (now.getFullYear(), 03-1, thisYearSDays, 2, 0, 0);\r
- daylightsavingWinter = new Date (now.getFullYear(), 10-1, thisYearWDays, 2, 0, 0);\r
- if (daylightsavingSummer < now) {\r
- daylightsavingSummer = new Date (now.getFullYear()+1, 03-1, nextYearSDays, 2, 0, 0);\r
- var summer = true;\r
- }\r
- if (daylightsavingWinter < now) {\r
- daylightsavingWinter = new Date (now.getFullYear()+1, 10-1, nextYearWDays, 2, 0, 0);\r
- var winter = true;\r
+\r
+ // if we already calculated DST summer and winter time dates for this year, use cached values\r
+ var dst = daylightSavingDates[curDate.getFullYear()];\r
+ if (!dst) {\r
+ var thisYearS = new Date(curDate.getFullYear(), 3, 0, 0, 0, 0 );\r
+ var thisYearW = new Date(curDate.getFullYear(), 10, 0, 0, 0, 0 );\r
+ var nextYearS = new Date(curDate.getFullYear() + 1, 3, 0, 0, 0, 0 );\r
+ var nextYearW = new Date(curDate.getFullYear() + 1, 10, 0, 0, 0, 0 );\r
+ \r
+ thisYearSDays = nextYearSDays = 90;\r
+ thisYearWDays = nextYearWDays = 304;\r
+ \r
+ thisYearSDays = calcLeapYear(curDate.getFullYear(), thisYearSDays);\r
+ thisYearWDays = calcLeapYear(curDate.getFullYear(), thisYearWDays);\r
+ nextYearSDays = calcLeapYear(curDate.getFullYear() + 1, nextYearSDays);\r
+ nextYearWDays = calcLeapYear(curDate.getFullYear() + 1, nextYearWDays);\r
+ \r
+ thisYearSDays = subToSunday(thisYearS, curDate.getFullYear(), thisYearSDays, 59);\r
+ thisYearWDays = subToSunday(thisYearW, curDate.getFullYear(), thisYearWDays, 273);\r
+ nextYearSDays = subToSunday(nextYearS, curDate.getFullYear() + 1, nextYearSDays, 59);\r
+ nextYearWDays = subToSunday(nextYearW, curDate.getFullYear() + 1, nextYearWDays, 273);\r
+ \r
+ dst = {\r
+ Summer: new Date (curDate.getFullYear(), 03-1, thisYearSDays, 2, 0, 0),\r
+ Winter: new Date (curDate.getFullYear(), 10-1, thisYearWDays, 2, 0, 0),\r
+ }\r
+ daylightSavingDates[curDate.getFullYear()] = dst;\r