| //Date_constants.js |
| // Copyright 2009 the Sputnik authors. All rights reserved. |
| // This code is governed by the BSD license found in the LICENSE file. |
| |
| var HoursPerDay = 24; |
| var MinutesPerHour = 60; |
| var SecondsPerMinute = 60; |
| |
| var msPerDay = 86400000; |
| var msPerSecond = 1000; |
| var msPerMinute = 60000; |
| var msPerHour = 3600000; |
| |
| var date_1899_end = -2208988800001; |
| var date_1900_start = -2208988800000; |
| var date_1969_end = -1; |
| var date_1970_start = 0; |
| var date_1999_end = 946684799999; |
| var date_2000_start = 946684800000; |
| var date_2099_end = 4102444799999; |
| var date_2100_start = 4102444800000; |
| |
| // Copyright 2009 the Sputnik authors. All rights reserved. |
| // This code is governed by the BSD license found in the LICENSE file. |
| |
| //the following values are normally generated by the sputnik.py driver |
| var $LocalTZ, |
| $DST_start_month, |
| $DST_start_sunday, |
| $DST_start_hour, |
| $DST_start_minutes, |
| $DST_end_month, |
| $DST_end_sunday, |
| $DST_end_hour, |
| $DST_end_minutes; |
| |
| (function () { |
| /** |
| * Finds the first date, starting from |start|, where |predicate| |
| * holds. |
| */ |
| var findNearestDateBefore = function(start, predicate) { |
| var current = start; |
| var month = 1000 * 60 * 60 * 24 * 30; |
| for (var step = month; step > 0; step = Math.floor(step / 3)) { |
| if (!predicate(current)) { |
| while (!predicate(current)) |
| current = new Date(current.getTime() + step); |
| current = new Date(current.getTime() - step); |
| } |
| } |
| while (!predicate(current)) { |
| current = new Date(current.getTime() + 1); |
| } |
| return current; |
| }; |
| |
| var juneDate = new Date(2000, 5, 20, 0, 0, 0, 0); |
| var decemberDate = new Date(2000, 11, 20, 0, 0, 0, 0); |
| var juneOffset = juneDate.getTimezoneOffset(); |
| var decemberOffset = decemberDate.getTimezoneOffset(); |
| var isSouthernHemisphere = (juneOffset > decemberOffset); |
| var winterTime = isSouthernHemisphere ? juneDate : decemberDate; |
| var summerTime = isSouthernHemisphere ? decemberDate : juneDate; |
| |
| var dstStart = findNearestDateBefore(winterTime, function (date) { |
| return date.getTimezoneOffset() == summerTime.getTimezoneOffset(); |
| }); |
| $DST_start_month = dstStart.getMonth(); |
| $DST_start_sunday = dstStart.getDate() > 15 ? '"last"' : '"first"'; |
| $DST_start_hour = dstStart.getHours(); |
| $DST_start_minutes = dstStart.getMinutes(); |
| |
| var dstEnd = findNearestDateBefore(summerTime, function (date) { |
| return date.getTimezoneOffset() == winterTime.getTimezoneOffset(); |
| }); |
| $DST_end_month = dstEnd.getMonth(); |
| $DST_end_sunday = dstEnd.getDate() > 15 ? '"last"' : '"first"'; |
| $DST_end_hour = dstEnd.getHours(); |
| $DST_end_minutes = dstEnd.getMinutes(); |
| |
| return; |
| })(); |