Index: src/date.js |
=================================================================== |
--- src/date.js (revision 5283) |
+++ src/date.js (working copy) |
@@ -137,12 +137,18 @@ |
// Time interval where the cached offset is valid. |
start: 0, end: -1, |
// Size of next interval expansion. |
- increment: 0 |
+ increment: 0, |
+ initial_increment: 19 * msPerDay |
}; |
// NOTE: The implementation relies on the fact that no time zones have |
-// more than one daylight savings offset change per month. |
+// more than one daylight savings offset change per 19 days. |
+// |
+// In Egypt in 2010 they decided to suspend DST during Ramadan. This |
+// led to a short interval where DST is in effect from September 10 to |
+// September 30. |
+// |
// If this function is called with NaN it returns NaN. |
function DaylightSavingsOffset(t) { |
// Load the cache object from the builtins object. |
@@ -171,7 +177,7 @@ |
// the offset in the cache, we grow the cached time interval |
// and return the offset. |
cache.end = new_end; |
- cache.increment = msPerMonth; |
+ cache.increment = cache.initial_increment; |
return end_offset; |
} else { |
var offset = %DateDaylightSavingsOffset(EquivalentTime(t)); |
@@ -182,7 +188,7 @@ |
// the interval to reflect this and reset the increment. |
cache.start = t; |
cache.end = new_end; |
- cache.increment = msPerMonth; |
+ cache.increment = cache.initial_increment; |
} else { |
// The interval contains a DST offset change and the given time is |
// before it. Adjust the increment to avoid a linear search for |
@@ -207,7 +213,7 @@ |
var offset = %DateDaylightSavingsOffset(EquivalentTime(t)); |
cache.offset = offset; |
cache.start = cache.end = t; |
- cache.increment = msPerMonth; |
+ cache.increment = cache.initial_increment; |
return offset; |
} |