Index: src/date-delay.js |
=================================================================== |
--- src/date-delay.js (revision 3562) |
+++ src/date-delay.js (working copy) |
@@ -45,12 +45,6 @@ |
throw new $TypeError('this is not a Date object.'); |
} |
-// ECMA 262 - 15.9.1.2 |
-function Day(time) { |
- return FLOOR(time / msPerDay); |
-} |
- |
- |
// ECMA 262 - 5.2 |
function Modulo(value, remainder) { |
var mod = value % remainder; |
@@ -86,33 +80,16 @@ |
} |
-function YearFromTime(time) { |
- return FromJulianDay(Day(time) + kDayZeroInJulianDay).year; |
-} |
- |
- |
function InLeapYear(time) { |
- return DaysInYear(YearFromTime(time)) == 366 ? 1 : 0; |
+ return DaysInYear(YEAR_FROM_TIME(time)) == 366 ? 1 : 0; |
} |
-// ECMA 262 - 15.9.1.4 |
-function MonthFromTime(time) { |
- return FromJulianDay(Day(time) + kDayZeroInJulianDay).month; |
-} |
- |
- |
function DayWithinYear(time) { |
- return Day(time) - DayFromYear(YearFromTime(time)); |
+ return DAY(time) - DayFromYear(YEAR_FROM_TIME(time)); |
} |
-// ECMA 262 - 15.9.1.5 |
-function DateFromTime(time) { |
- return FromJulianDay(Day(time) + kDayZeroInJulianDay).date; |
-} |
- |
- |
// ECMA 262 - 15.9.1.9 |
function EquivalentYear(year) { |
// Returns an equivalent year in the range [2008-2035] matching |
@@ -136,7 +113,7 @@ |
// we must do this, but for compatibility with other browsers, we use |
// the actual year if it is in the range 1970..2037 |
if (t >= 0 && t <= 2.1e12) return t; |
- var day = MakeDay(EquivalentYear(YearFromTime(t)), MonthFromTime(t), DateFromTime(t)); |
+ var day = MakeDay(EquivalentYear(YEAR_FROM_TIME(t)), MONTH_FROM_TIME(t), DATE_FROM_TIME(t)); |
return TimeClip(MakeDate(day, TimeWithinDay(t))); |
} |
@@ -232,7 +209,7 @@ |
function WeekDay(time) { |
- return Modulo(Day(time) + 4, 7); |
+ return Modulo(DAY(time) + 4, 7); |
} |
var local_time_offset = %DateLocalTimeOffset(); |
@@ -243,7 +220,14 @@ |
} |
function LocalTimeNoCheck(time) { |
- return time + local_time_offset + DaylightSavingsOffset(time); |
+ // Inline the DST offset cache checks for speed. |
+ var cache = DST_offset_cache; |
+ if (cache.start <= time && time <= cache.end) { |
+ var dst_offset = cache.offset; |
+ } else { |
+ var dst_offset = DaylightSavingsOffset(time); |
+ } |
+ return time + local_time_offset + dst_offset; |
} |
@@ -254,27 +238,6 @@ |
} |
-// ECMA 262 - 15.9.1.10 |
-function HourFromTime(time) { |
- return Modulo(FLOOR(time / msPerHour), HoursPerDay); |
-} |
- |
- |
-function MinFromTime(time) { |
- return Modulo(FLOOR(time / msPerMinute), MinutesPerHour); |
-} |
- |
- |
-function SecFromTime(time) { |
- return Modulo(FLOOR(time / msPerSecond), SecondsPerMinute); |
-} |
- |
- |
-function msFromTime(time) { |
- return Modulo(time, msPerSecond); |
-} |
- |
- |
// ECMA 262 - 15.9.1.11 |
function MakeTime(hour, min, sec, ms) { |
if (!$isFinite(hour)) return $NaN; |
@@ -468,7 +431,7 @@ |
value = DateParse(year); |
if (!NUMBER_IS_NAN(value)) { |
cache.time = value; |
- cache.year = YearFromTime(LocalTimeNoCheck(value)); |
+ cache.year = YEAR_FROM_TIME(LocalTimeNoCheck(value)); |
cache.string = year; |
} |
} |
@@ -508,60 +471,59 @@ |
return DATE_VALUE(aDate); |
} |
- |
function GetMillisecondsFrom(aDate) { |
var t = DATE_VALUE(aDate); |
if (NUMBER_IS_NAN(t)) return t; |
- return msFromTime(LocalTimeNoCheck(t)); |
+ return MS_FROM_TIME(LocalTimeNoCheck(t)); |
} |
function GetUTCMillisecondsFrom(aDate) { |
var t = DATE_VALUE(aDate); |
if (NUMBER_IS_NAN(t)) return t; |
- return msFromTime(t); |
+ return MS_FROM_TIME(t); |
} |
function GetSecondsFrom(aDate) { |
var t = DATE_VALUE(aDate); |
if (NUMBER_IS_NAN(t)) return t; |
- return SecFromTime(LocalTimeNoCheck(t)); |
+ return SEC_FROM_TIME(LocalTimeNoCheck(t)); |
} |
function GetUTCSecondsFrom(aDate) { |
var t = DATE_VALUE(aDate); |
if (NUMBER_IS_NAN(t)) return t; |
- return SecFromTime(t); |
+ return SEC_FROM_TIME(t); |
} |
function GetMinutesFrom(aDate) { |
var t = DATE_VALUE(aDate); |
if (NUMBER_IS_NAN(t)) return t; |
- return MinFromTime(LocalTimeNoCheck(t)); |
+ return MIN_FROM_TIME(LocalTimeNoCheck(t)); |
} |
function GetUTCMinutesFrom(aDate) { |
var t = DATE_VALUE(aDate); |
if (NUMBER_IS_NAN(t)) return t; |
- return MinFromTime(t); |
+ return MIN_FROM_TIME(t); |
} |
function GetHoursFrom(aDate) { |
var t = DATE_VALUE(aDate); |
if (NUMBER_IS_NAN(t)) return t; |
- return HourFromTime(LocalTimeNoCheck(t)); |
+ return HOUR_FROM_TIME(LocalTimeNoCheck(t)); |
} |
function GetUTCHoursFrom(aDate) { |
var t = DATE_VALUE(aDate); |
if (NUMBER_IS_NAN(t)) return t; |
- return HourFromTime(t); |
+ return HOUR_FROM_TIME(t); |
} |
@@ -570,42 +532,42 @@ |
if (NUMBER_IS_NAN(t)) return t; |
var cache = Date_cache; |
if (cache.time === t) return cache.year; |
- return YearFromTime(LocalTimeNoCheck(t)); |
+ return YEAR_FROM_TIME(LocalTimeNoCheck(t)); |
} |
function GetUTCFullYearFrom(aDate) { |
var t = DATE_VALUE(aDate); |
if (NUMBER_IS_NAN(t)) return t; |
- return YearFromTime(t); |
+ return YEAR_FROM_TIME(t); |
} |
function GetMonthFrom(aDate) { |
var t = DATE_VALUE(aDate); |
if (NUMBER_IS_NAN(t)) return t; |
- return MonthFromTime(LocalTimeNoCheck(t)); |
+ return MONTH_FROM_TIME(LocalTimeNoCheck(t)); |
} |
function GetUTCMonthFrom(aDate) { |
var t = DATE_VALUE(aDate); |
if (NUMBER_IS_NAN(t)) return t; |
- return MonthFromTime(t); |
+ return MONTH_FROM_TIME(t); |
} |
function GetDateFrom(aDate) { |
var t = DATE_VALUE(aDate); |
if (NUMBER_IS_NAN(t)) return t; |
- return DateFromTime(LocalTimeNoCheck(t)); |
+ return DATE_FROM_TIME(LocalTimeNoCheck(t)); |
} |
function GetUTCDateFrom(aDate) { |
var t = DATE_VALUE(aDate); |
if (NUMBER_IS_NAN(t)) return t; |
- return DateFromTime(t); |
+ return DATE_FROM_TIME(t); |
} |
@@ -622,7 +584,7 @@ |
function DateString(time) { |
- var YMD = FromJulianDay(Day(time) + kDayZeroInJulianDay); |
+ var YMD = FromJulianDay(DAY(time) + kDayZeroInJulianDay); |
return WeekDays[WeekDay(time)] + ' ' |
+ Months[YMD.month] + ' ' |
+ TwoDigitString(YMD.date) + ' ' |
@@ -635,7 +597,7 @@ |
function LongDateString(time) { |
- var YMD = FromJulianDay(Day(time) + kDayZeroInJulianDay); |
+ var YMD = FromJulianDay(DAY(time) + kDayZeroInJulianDay); |
return LongWeekDays[WeekDay(time)] + ', ' |
+ LongMonths[YMD.month] + ' ' |
+ TwoDigitString(YMD.date) + ', ' |
@@ -644,9 +606,9 @@ |
function TimeString(time) { |
- return TwoDigitString(HourFromTime(time)) + ':' |
- + TwoDigitString(MinFromTime(time)) + ':' |
- + TwoDigitString(SecFromTime(time)); |
+ return TwoDigitString(HOUR_FROM_TIME(time)) + ':' |
+ + TwoDigitString(MIN_FROM_TIME(time)) + ':' |
+ + TwoDigitString(SEC_FROM_TIME(time)); |
} |
@@ -892,8 +854,8 @@ |
function DateSetMilliseconds(ms) { |
var t = LocalTime(DATE_VALUE(this)); |
ms = ToNumber(ms); |
- var time = MakeTime(HourFromTime(t), MinFromTime(t), SecFromTime(t), ms); |
- return %_SetValueOf(this, TimeClip(UTC(MakeDate(Day(t), time)))); |
+ var time = MakeTime(HOUR_FROM_TIME(t), MIN_FROM_TIME(t), SEC_FROM_TIME(t), ms); |
+ return %_SetValueOf(this, TimeClip(UTC(MakeDate(DAY(t), time)))); |
} |
@@ -901,8 +863,8 @@ |
function DateSetUTCMilliseconds(ms) { |
var t = DATE_VALUE(this); |
ms = ToNumber(ms); |
- var time = MakeTime(HourFromTime(t), MinFromTime(t), SecFromTime(t), ms); |
- return %_SetValueOf(this, TimeClip(MakeDate(Day(t), time))); |
+ var time = MakeTime(HOUR_FROM_TIME(t), MIN_FROM_TIME(t), SEC_FROM_TIME(t), ms); |
+ return %_SetValueOf(this, TimeClip(MakeDate(DAY(t), time))); |
} |
@@ -911,8 +873,8 @@ |
var t = LocalTime(DATE_VALUE(this)); |
sec = ToNumber(sec); |
ms = %_ArgumentsLength() < 2 ? GetMillisecondsFrom(this) : ToNumber(ms); |
- var time = MakeTime(HourFromTime(t), MinFromTime(t), sec, ms); |
- return %_SetValueOf(this, TimeClip(UTC(MakeDate(Day(t), time)))); |
+ var time = MakeTime(HOUR_FROM_TIME(t), MIN_FROM_TIME(t), sec, ms); |
+ return %_SetValueOf(this, TimeClip(UTC(MakeDate(DAY(t), time)))); |
} |
@@ -921,8 +883,8 @@ |
var t = DATE_VALUE(this); |
sec = ToNumber(sec); |
ms = %_ArgumentsLength() < 2 ? GetUTCMillisecondsFrom(this) : ToNumber(ms); |
- var time = MakeTime(HourFromTime(t), MinFromTime(t), sec, ms); |
- return %_SetValueOf(this, TimeClip(MakeDate(Day(t), time))); |
+ var time = MakeTime(HOUR_FROM_TIME(t), MIN_FROM_TIME(t), sec, ms); |
+ return %_SetValueOf(this, TimeClip(MakeDate(DAY(t), time))); |
} |
@@ -933,8 +895,8 @@ |
var argc = %_ArgumentsLength(); |
sec = argc < 2 ? GetSecondsFrom(this) : ToNumber(sec); |
ms = argc < 3 ? GetMillisecondsFrom(this) : ToNumber(ms); |
- var time = MakeTime(HourFromTime(t), min, sec, ms); |
- return %_SetValueOf(this, TimeClip(UTC(MakeDate(Day(t), time)))); |
+ var time = MakeTime(HOUR_FROM_TIME(t), min, sec, ms); |
+ return %_SetValueOf(this, TimeClip(UTC(MakeDate(DAY(t), time)))); |
} |
@@ -945,8 +907,8 @@ |
var argc = %_ArgumentsLength(); |
sec = argc < 2 ? GetUTCSecondsFrom(this) : ToNumber(sec); |
ms = argc < 3 ? GetUTCMillisecondsFrom(this) : ToNumber(ms); |
- var time = MakeTime(HourFromTime(t), min, sec, ms); |
- return %_SetValueOf(this, TimeClip(MakeDate(Day(t), time))); |
+ var time = MakeTime(HOUR_FROM_TIME(t), min, sec, ms); |
+ return %_SetValueOf(this, TimeClip(MakeDate(DAY(t), time))); |
} |
@@ -959,7 +921,7 @@ |
sec = argc < 3 ? GetSecondsFrom(this) : ToNumber(sec); |
ms = argc < 4 ? GetMillisecondsFrom(this) : ToNumber(ms); |
var time = MakeTime(hour, min, sec, ms); |
- return %_SetValueOf(this, TimeClip(UTC(MakeDate(Day(t), time)))); |
+ return %_SetValueOf(this, TimeClip(UTC(MakeDate(DAY(t), time)))); |
} |
@@ -972,7 +934,7 @@ |
sec = argc < 3 ? GetUTCSecondsFrom(this) : ToNumber(sec); |
ms = argc < 4 ? GetUTCMillisecondsFrom(this) : ToNumber(ms); |
var time = MakeTime(hour, min, sec, ms); |
- return %_SetValueOf(this, TimeClip(MakeDate(Day(t), time))); |
+ return %_SetValueOf(this, TimeClip(MakeDate(DAY(t), time))); |
} |
@@ -980,7 +942,7 @@ |
function DateSetDate(date) { |
var t = LocalTime(DATE_VALUE(this)); |
date = ToNumber(date); |
- var day = MakeDay(YearFromTime(t), MonthFromTime(t), date); |
+ var day = MakeDay(YEAR_FROM_TIME(t), MONTH_FROM_TIME(t), date); |
return %_SetValueOf(this, TimeClip(UTC(MakeDate(day, TimeWithinDay(t))))); |
} |
@@ -989,7 +951,7 @@ |
function DateSetUTCDate(date) { |
var t = DATE_VALUE(this); |
date = ToNumber(date); |
- var day = MakeDay(YearFromTime(t), MonthFromTime(t), date); |
+ var day = MakeDay(YEAR_FROM_TIME(t), MONTH_FROM_TIME(t), date); |
return %_SetValueOf(this, TimeClip(MakeDate(day, TimeWithinDay(t)))); |
} |
@@ -999,7 +961,7 @@ |
var t = LocalTime(DATE_VALUE(this)); |
month = ToNumber(month); |
date = %_ArgumentsLength() < 2 ? GetDateFrom(this) : ToNumber(date); |
- var day = MakeDay(YearFromTime(t), month, date); |
+ var day = MakeDay(YEAR_FROM_TIME(t), month, date); |
return %_SetValueOf(this, TimeClip(UTC(MakeDate(day, TimeWithinDay(t))))); |
} |
@@ -1009,7 +971,7 @@ |
var t = DATE_VALUE(this); |
month = ToNumber(month); |
date = %_ArgumentsLength() < 2 ? GetUTCDateFrom(this) : ToNumber(date); |
- var day = MakeDay(YearFromTime(t), month, date); |
+ var day = MakeDay(YEAR_FROM_TIME(t), month, date); |
return %_SetValueOf(this, TimeClip(MakeDate(day, TimeWithinDay(t)))); |
} |
@@ -1020,8 +982,8 @@ |
t = NUMBER_IS_NAN(t) ? 0 : LocalTimeNoCheck(t); |
year = ToNumber(year); |
var argc = %_ArgumentsLength(); |
- month = argc < 2 ? MonthFromTime(t) : ToNumber(month); |
- date = argc < 3 ? DateFromTime(t) : ToNumber(date); |
+ month = argc < 2 ? MONTH_FROM_TIME(t) : ToNumber(month); |
+ date = argc < 3 ? DATE_FROM_TIME(t) : ToNumber(date); |
var day = MakeDay(year, month, date); |
return %_SetValueOf(this, TimeClip(UTC(MakeDate(day, TimeWithinDay(t))))); |
} |
@@ -1033,8 +995,8 @@ |
if (NUMBER_IS_NAN(t)) t = 0; |
var argc = %_ArgumentsLength(); |
year = ToNumber(year); |
- month = argc < 2 ? MonthFromTime(t) : ToNumber(month); |
- date = argc < 3 ? DateFromTime(t) : ToNumber(date); |
+ month = argc < 2 ? MONTH_FROM_TIME(t) : ToNumber(month); |
+ date = argc < 3 ? DATE_FROM_TIME(t) : ToNumber(date); |
var day = MakeDay(year, month, date); |
return %_SetValueOf(this, TimeClip(MakeDate(day, TimeWithinDay(t)))); |
} |
@@ -1046,9 +1008,9 @@ |
if (NUMBER_IS_NAN(t)) return kInvalidDate; |
// Return UTC string of the form: Sat, 31 Jan 1970 23:00:00 GMT |
return WeekDays[WeekDay(t)] + ', ' |
- + TwoDigitString(DateFromTime(t)) + ' ' |
- + Months[MonthFromTime(t)] + ' ' |
- + YearFromTime(t) + ' ' |
+ + TwoDigitString(DATE_FROM_TIME(t)) + ' ' |
+ + Months[MONTH_FROM_TIME(t)] + ' ' |
+ + YEAR_FROM_TIME(t) + ' ' |
+ TimeString(t) + ' GMT'; |
} |
@@ -1057,7 +1019,7 @@ |
function DateGetYear() { |
var t = DATE_VALUE(this); |
if (NUMBER_IS_NAN(t)) return $NaN; |
- return YearFromTime(LocalTimeNoCheck(t)) - 1900; |
+ return YEAR_FROM_TIME(LocalTimeNoCheck(t)) - 1900; |
} |
@@ -1069,7 +1031,7 @@ |
if (NUMBER_IS_NAN(year)) return %_SetValueOf(this, $NaN); |
year = (0 <= TO_INTEGER(year) && TO_INTEGER(year) <= 99) |
? 1900 + TO_INTEGER(year) : year; |
- var day = MakeDay(year, MonthFromTime(t), DateFromTime(t)); |
+ var day = MakeDay(year, MONTH_FROM_TIME(t), DATE_FROM_TIME(t)); |
return %_SetValueOf(this, TimeClip(UTC(MakeDate(day, TimeWithinDay(t))))); |
} |