| OLD | NEW |
| 1 // Copyright 2006-2008 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2008 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 22 matching lines...) Expand all Loading... |
| 33 | 33 |
| 34 // Keep reference to original values of some global properties. This | 34 // Keep reference to original values of some global properties. This |
| 35 // has the added benefit that the code in this file is isolated from | 35 // has the added benefit that the code in this file is isolated from |
| 36 // changes to these properties. | 36 // changes to these properties. |
| 37 const $Date = global.Date; | 37 const $Date = global.Date; |
| 38 | 38 |
| 39 | 39 |
| 40 // ECMA 262 - 15.9.1.2 | 40 // ECMA 262 - 15.9.1.2 |
| 41 function Day(time) { | 41 function Day(time) { |
| 42 return $floor(time/msPerDay); | 42 return $floor(time/msPerDay); |
| 43 }; | 43 } |
| 44 | 44 |
| 45 | 45 |
| 46 // ECMA 262 - 5.2 | 46 // ECMA 262 - 5.2 |
| 47 function Modulo(value, remainder) { | 47 function Modulo(value, remainder) { |
| 48 var mod = value % remainder; | 48 var mod = value % remainder; |
| 49 return mod >= 0 ? mod : mod + remainder; | 49 return mod >= 0 ? mod : mod + remainder; |
| 50 }; | 50 } |
| 51 | 51 |
| 52 | 52 |
| 53 function TimeWithinDay(time) { | 53 function TimeWithinDay(time) { |
| 54 return Modulo(time, msPerDay); | 54 return Modulo(time, msPerDay); |
| 55 }; | 55 } |
| 56 | 56 |
| 57 | 57 |
| 58 // ECMA 262 - 15.9.1.3 | 58 // ECMA 262 - 15.9.1.3 |
| 59 function DaysInYear(year) { | 59 function DaysInYear(year) { |
| 60 if (year % 4 != 0) return 365; | 60 if (year % 4 != 0) return 365; |
| 61 if ((year % 100 == 0) && (year % 400 != 0)) return 365; | 61 if ((year % 100 == 0) && (year % 400 != 0)) return 365; |
| 62 return 366; | 62 return 366; |
| 63 }; | 63 } |
| 64 | 64 |
| 65 | 65 |
| 66 function DayFromYear(year) { | 66 function DayFromYear(year) { |
| 67 return 365 * (year-1970) | 67 return 365 * (year-1970) |
| 68 + $floor((year-1969)/4) | 68 + $floor((year-1969)/4) |
| 69 - $floor((year-1901)/100) | 69 - $floor((year-1901)/100) |
| 70 + $floor((year-1601)/400); | 70 + $floor((year-1601)/400); |
| 71 }; | 71 } |
| 72 | 72 |
| 73 | 73 |
| 74 function TimeFromYear(year) { | 74 function TimeFromYear(year) { |
| 75 return msPerDay * DayFromYear(year); | 75 return msPerDay * DayFromYear(year); |
| 76 }; | 76 } |
| 77 | 77 |
| 78 | 78 |
| 79 function YearFromTime(time) { | 79 function YearFromTime(time) { |
| 80 return FromJulianDay(Day(time) + kDayZeroInJulianDay).year; | 80 return FromJulianDay(Day(time) + kDayZeroInJulianDay).year; |
| 81 }; | 81 } |
| 82 | 82 |
| 83 | 83 |
| 84 function InLeapYear(time) { | 84 function InLeapYear(time) { |
| 85 return DaysInYear(YearFromTime(time)) == 366 ? 1 : 0; | 85 return DaysInYear(YearFromTime(time)) == 366 ? 1 : 0; |
| 86 }; | 86 } |
| 87 | 87 |
| 88 | 88 |
| 89 // ECMA 262 - 15.9.1.4 | 89 // ECMA 262 - 15.9.1.4 |
| 90 function MonthFromTime(time) { | 90 function MonthFromTime(time) { |
| 91 return FromJulianDay(Day(time) + kDayZeroInJulianDay).month; | 91 return FromJulianDay(Day(time) + kDayZeroInJulianDay).month; |
| 92 }; | 92 } |
| 93 | 93 |
| 94 | 94 |
| 95 function DayWithinYear(time) { | 95 function DayWithinYear(time) { |
| 96 return Day(time) - DayFromYear(YearFromTime(time)); | 96 return Day(time) - DayFromYear(YearFromTime(time)); |
| 97 }; | 97 } |
| 98 | 98 |
| 99 | 99 |
| 100 // ECMA 262 - 15.9.1.5 | 100 // ECMA 262 - 15.9.1.5 |
| 101 function DateFromTime(time) { | 101 function DateFromTime(time) { |
| 102 return FromJulianDay(Day(time) + kDayZeroInJulianDay).date; | 102 return FromJulianDay(Day(time) + kDayZeroInJulianDay).date; |
| 103 }; | 103 } |
| 104 | 104 |
| 105 | 105 |
| 106 // ECMA 262 - 15.9.1.9 | 106 // ECMA 262 - 15.9.1.9 |
| 107 function EquivalentYear(year) { | 107 function EquivalentYear(year) { |
| 108 // Returns an equivalent year in the range [1956-2000] matching | 108 // Returns an equivalent year in the range [1956-2000] matching |
| 109 // - leap year. | 109 // - leap year. |
| 110 // - week day of first day. | 110 // - week day of first day. |
| 111 var time = TimeFromYear(year); | 111 var time = TimeFromYear(year); |
| 112 return (InLeapYear(time) == 0 ? 1967 : 1956) + (WeekDay(time) * 12) % 28; | 112 return (InLeapYear(time) == 0 ? 1967 : 1956) + (WeekDay(time) * 12) % 28; |
| 113 }; | 113 } |
| 114 | 114 |
| 115 | 115 |
| 116 function EquivalentTime(t) { | 116 function EquivalentTime(t) { |
| 117 // The issue here is that some library calls don't work right for dates | 117 // The issue here is that some library calls don't work right for dates |
| 118 // that cannot be represented using a signed 32 bit integer (measured in | 118 // that cannot be represented using a signed 32 bit integer (measured in |
| 119 // whole seconds based on the 1970 epoch). | 119 // whole seconds based on the 1970 epoch). |
| 120 // We solve this by mapping the time to a year with same leap-year-ness | 120 // We solve this by mapping the time to a year with same leap-year-ness |
| 121 // and same starting day for the year. | 121 // and same starting day for the year. |
| 122 // As an optimization we avoid finding an equivalent year in the common | 122 // As an optimization we avoid finding an equivalent year in the common |
| 123 // case. We are measuring in ms here so the 32 bit signed integer range | 123 // case. We are measuring in ms here so the 32 bit signed integer range |
| 124 // is +-(1<<30)*1000 ie approximately +-2.1e20. | 124 // is +-(1<<30)*1000 ie approximately +-2.1e20. |
| 125 if (t >= -2.1e12 && t <= 2.1e12) return t; | 125 if (t >= -2.1e12 && t <= 2.1e12) return t; |
| 126 var day = MakeDay(EquivalentYear(YearFromTime(t)), MonthFromTime(t), DateFromT
ime(t)); | 126 var day = MakeDay(EquivalentYear(YearFromTime(t)), MonthFromTime(t), DateFromT
ime(t)); |
| 127 return TimeClip(MakeDate(day, TimeWithinDay(t))); | 127 return TimeClip(MakeDate(day, TimeWithinDay(t))); |
| 128 }; | 128 } |
| 129 | 129 |
| 130 | 130 |
| 131 var local_time_offset; | 131 var local_time_offset; |
| 132 | 132 |
| 133 function LocalTimeOffset() { | 133 function LocalTimeOffset() { |
| 134 if (IS_UNDEFINED(local_time_offset)) { | 134 if (IS_UNDEFINED(local_time_offset)) { |
| 135 local_time_offset = %DateLocalTimeOffset(); | 135 local_time_offset = %DateLocalTimeOffset(); |
| 136 } | 136 } |
| 137 return local_time_offset; | 137 return local_time_offset; |
| 138 }; | 138 } |
| 139 | 139 |
| 140 | 140 |
| 141 var daylight_cache_time = $NaN; | 141 var daylight_cache_time = $NaN; |
| 142 var daylight_cache_offset; | 142 var daylight_cache_offset; |
| 143 | 143 |
| 144 function DaylightSavingsOffset(t) { | 144 function DaylightSavingsOffset(t) { |
| 145 if (t == daylight_cache_time) { | 145 if (t == daylight_cache_time) { |
| 146 return daylight_cache_offset; | 146 return daylight_cache_offset; |
| 147 } | 147 } |
| 148 var offset = %DateDaylightSavingsOffset(EquivalentTime(t)); | 148 var offset = %DateDaylightSavingsOffset(EquivalentTime(t)); |
| 149 daylight_cache_time = t; | 149 daylight_cache_time = t; |
| 150 daylight_cache_offset = offset; | 150 daylight_cache_offset = offset; |
| 151 return offset; | 151 return offset; |
| 152 }; | 152 } |
| 153 | 153 |
| 154 | 154 |
| 155 var timezone_cache_time = $NaN; | 155 var timezone_cache_time = $NaN; |
| 156 var timezone_cache_timezone; | 156 var timezone_cache_timezone; |
| 157 | 157 |
| 158 function LocalTimezone(t) { | 158 function LocalTimezone(t) { |
| 159 if(t == timezone_cache_time) { | 159 if(t == timezone_cache_time) { |
| 160 return timezone_cache_timezone; | 160 return timezone_cache_timezone; |
| 161 } | 161 } |
| 162 var timezone = %DateLocalTimezone(EquivalentTime(t)); | 162 var timezone = %DateLocalTimezone(EquivalentTime(t)); |
| 163 timezone_cache_time = t; | 163 timezone_cache_time = t; |
| 164 timezone_cache_timezone = timezone; | 164 timezone_cache_timezone = timezone; |
| 165 return timezone; | 165 return timezone; |
| 166 }; | 166 } |
| 167 | 167 |
| 168 | 168 |
| 169 function WeekDay(time) { | 169 function WeekDay(time) { |
| 170 return Modulo(Day(time) + 4, 7); | 170 return Modulo(Day(time) + 4, 7); |
| 171 }; | 171 } |
| 172 | 172 |
| 173 | 173 |
| 174 function LocalTime(time) { | 174 function LocalTime(time) { |
| 175 if ($isNaN(time)) return time; | 175 if ($isNaN(time)) return time; |
| 176 return time + LocalTimeOffset() + DaylightSavingsOffset(time); | 176 return time + LocalTimeOffset() + DaylightSavingsOffset(time); |
| 177 }; | 177 } |
| 178 | 178 |
| 179 | 179 |
| 180 function UTC(time) { | 180 function UTC(time) { |
| 181 if ($isNaN(time)) return time; | 181 if ($isNaN(time)) return time; |
| 182 var tmp = time - LocalTimeOffset(); | 182 var tmp = time - LocalTimeOffset(); |
| 183 return tmp - DaylightSavingsOffset(tmp); | 183 return tmp - DaylightSavingsOffset(tmp); |
| 184 }; | 184 } |
| 185 | 185 |
| 186 | 186 |
| 187 // ECMA 262 - 15.9.1.10 | 187 // ECMA 262 - 15.9.1.10 |
| 188 function HourFromTime(time) { | 188 function HourFromTime(time) { |
| 189 return Modulo($floor(time / msPerHour), HoursPerDay); | 189 return Modulo($floor(time / msPerHour), HoursPerDay); |
| 190 }; | 190 } |
| 191 | 191 |
| 192 | 192 |
| 193 function MinFromTime(time) { | 193 function MinFromTime(time) { |
| 194 return Modulo($floor(time / msPerMinute), MinutesPerHour); | 194 return Modulo($floor(time / msPerMinute), MinutesPerHour); |
| 195 }; | 195 } |
| 196 | 196 |
| 197 | 197 |
| 198 function SecFromTime(time) { | 198 function SecFromTime(time) { |
| 199 return Modulo($floor(time / msPerSecond), SecondsPerMinute); | 199 return Modulo($floor(time / msPerSecond), SecondsPerMinute); |
| 200 }; | 200 } |
| 201 | 201 |
| 202 | 202 |
| 203 function msFromTime(time) { | 203 function msFromTime(time) { |
| 204 return Modulo(time, msPerSecond); | 204 return Modulo(time, msPerSecond); |
| 205 }; | 205 } |
| 206 | 206 |
| 207 | 207 |
| 208 // ECMA 262 - 15.9.1.11 | 208 // ECMA 262 - 15.9.1.11 |
| 209 function MakeTime(hour, min, sec, ms) { | 209 function MakeTime(hour, min, sec, ms) { |
| 210 if (!$isFinite(hour)) return $NaN; | 210 if (!$isFinite(hour)) return $NaN; |
| 211 if (!$isFinite(min)) return $NaN; | 211 if (!$isFinite(min)) return $NaN; |
| 212 if (!$isFinite(sec)) return $NaN; | 212 if (!$isFinite(sec)) return $NaN; |
| 213 if (!$isFinite(ms)) return $NaN; | 213 if (!$isFinite(ms)) return $NaN; |
| 214 return TO_INTEGER(hour) * msPerHour | 214 return TO_INTEGER(hour) * msPerHour |
| 215 + TO_INTEGER(min) * msPerMinute | 215 + TO_INTEGER(min) * msPerMinute |
| 216 + TO_INTEGER(sec) * msPerSecond | 216 + TO_INTEGER(sec) * msPerSecond |
| 217 + TO_INTEGER(ms); | 217 + TO_INTEGER(ms); |
| 218 }; | 218 } |
| 219 | 219 |
| 220 | 220 |
| 221 // ECMA 262 - 15.9.1.12 | 221 // ECMA 262 - 15.9.1.12 |
| 222 function TimeInYear(year) { | 222 function TimeInYear(year) { |
| 223 return DaysInYear(year) * msPerDay; | 223 return DaysInYear(year) * msPerDay; |
| 224 }; | 224 } |
| 225 | 225 |
| 226 | 226 |
| 227 // Compute modified Julian day from year, month, date. | 227 // Compute modified Julian day from year, month, date. |
| 228 // The missing days in 1582 are ignored for JavaScript compatibility. | 228 // The missing days in 1582 are ignored for JavaScript compatibility. |
| 229 function ToJulianDay(year, month, date) { | 229 function ToJulianDay(year, month, date) { |
| 230 var jy = (month > 1) ? year : year - 1; | 230 var jy = (month > 1) ? year : year - 1; |
| 231 var jm = (month > 1) ? month + 2 : month + 14; | 231 var jm = (month > 1) ? month + 2 : month + 14; |
| 232 var ja = $floor(0.01*jy); | 232 var ja = $floor(0.01*jy); |
| 233 return $floor($floor(365.25*jy) + $floor(30.6001*jm) + date + 1720995) + 2 - j
a + $floor(0.25*ja); | 233 return $floor($floor(365.25*jy) + $floor(30.6001*jm) + date + 1720995) + 2 - j
a + $floor(0.25*ja); |
| 234 }; | 234 } |
| 235 | 235 |
| 236 | 236 |
| 237 var four_year_cycle_table; | 237 var four_year_cycle_table; |
| 238 | 238 |
| 239 | 239 |
| 240 function CalculateDateTable() { | 240 function CalculateDateTable() { |
| 241 var month_lengths = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; | 241 var month_lengths = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; |
| 242 var four_year_cycle_table = new $Array(1461); | 242 var four_year_cycle_table = new $Array(1461); |
| 243 | 243 |
| 244 var cumulative = 0; | 244 var cumulative = 0; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 257 (3 << kYearShift) + (month << kMonthShift) + day; | 257 (3 << kYearShift) + (month << kMonthShift) + day; |
| 258 leap_position++; | 258 leap_position++; |
| 259 position++; | 259 position++; |
| 260 } | 260 } |
| 261 if (month == 1) { | 261 if (month == 1) { |
| 262 four_year_cycle_table[leap_position++] = | 262 four_year_cycle_table[leap_position++] = |
| 263 (month << kMonthShift) + 29; | 263 (month << kMonthShift) + 29; |
| 264 } | 264 } |
| 265 } | 265 } |
| 266 return four_year_cycle_table; | 266 return four_year_cycle_table; |
| 267 }; | 267 } |
| 268 | 268 |
| 269 | 269 |
| 270 | 270 |
| 271 // Constructor for creating objects holding year, month, and date. | 271 // Constructor for creating objects holding year, month, and date. |
| 272 // Introduced to ensure the two return points in FromJulianDay match same map. | 272 // Introduced to ensure the two return points in FromJulianDay match same map. |
| 273 function DayTriplet(year, month, date) { | 273 function DayTriplet(year, month, date) { |
| 274 this.year = year; | 274 this.year = year; |
| 275 this.month = month; | 275 this.month = month; |
| 276 this.date = date; | 276 this.date = date; |
| 277 } | 277 } |
| 278 | 278 |
| 279 |
| 279 // Compute year, month, and day from modified Julian day. | 280 // Compute year, month, and day from modified Julian day. |
| 280 // The missing days in 1582 are ignored for JavaScript compatibility. | 281 // The missing days in 1582 are ignored for JavaScript compatibility. |
| 281 function FromJulianDay(julian) { | 282 function FromJulianDay(julian) { |
| 282 // Avoid floating point and non-Smi maths in common case. This is also a peri
od of | 283 // Avoid floating point and non-Smi maths in common case. This is also a peri
od of |
| 283 // time where leap years are very regular. The range is not too large to avoi
d overflow | 284 // time where leap years are very regular. The range is not too large to avoi
d overflow |
| 284 // when doing the multiply-to-divide trick. | 285 // when doing the multiply-to-divide trick. |
| 285 if (julian > kDayZeroInJulianDay && | 286 if (julian > kDayZeroInJulianDay && |
| 286 (julian - kDayZeroInJulianDay) < 40177) { // 1970 - 2080 | 287 (julian - kDayZeroInJulianDay) < 40177) { // 1970 - 2080 |
| 287 if (!four_year_cycle_table) | 288 if (!four_year_cycle_table) |
| 288 four_year_cycle_table = CalculateDateTable(); | 289 four_year_cycle_table = CalculateDateTable(); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 301 var jb = julian + 1 + jalpha - $floor(0.25 * jalpha) + 1524; | 302 var jb = julian + 1 + jalpha - $floor(0.25 * jalpha) + 1524; |
| 302 var jc = $floor(6680.0 + ((jb-2439870) - 122.1)/365.25); | 303 var jc = $floor(6680.0 + ((jb-2439870) - 122.1)/365.25); |
| 303 var jd = $floor(365 * jc + (0.25 * jc)); | 304 var jd = $floor(365 * jc + (0.25 * jc)); |
| 304 var je = $floor((jb - jd)/30.6001); | 305 var je = $floor((jb - jd)/30.6001); |
| 305 var m = je - 1; | 306 var m = je - 1; |
| 306 if (m > 12) m -= 13; | 307 if (m > 12) m -= 13; |
| 307 var y = jc - 4715; | 308 var y = jc - 4715; |
| 308 if (m > 2) { --y; --m; } | 309 if (m > 2) { --y; --m; } |
| 309 var d = jb - jd - $floor(30.6001 * je); | 310 var d = jb - jd - $floor(30.6001 * je); |
| 310 return new DayTriplet(y, m, d); | 311 return new DayTriplet(y, m, d); |
| 311 }; | 312 } |
| 312 | 313 |
| 313 // Compute number of days given a year, month, date. | 314 // Compute number of days given a year, month, date. |
| 314 // Note that month and date can lie outside the normal range. | 315 // Note that month and date can lie outside the normal range. |
| 315 // For example: | 316 // For example: |
| 316 // MakeDay(2007, -4, 20) --> MakeDay(2006, 8, 20) | 317 // MakeDay(2007, -4, 20) --> MakeDay(2006, 8, 20) |
| 317 // MakeDay(2007, -33, 1) --> MakeDay(2004, 3, 1) | 318 // MakeDay(2007, -33, 1) --> MakeDay(2004, 3, 1) |
| 318 // MakeDay(2007, 14, -50) --> MakeDay(2007, 8, 11) | 319 // MakeDay(2007, 14, -50) --> MakeDay(2007, 8, 11) |
| 319 function MakeDay(year, month, date) { | 320 function MakeDay(year, month, date) { |
| 320 if (!$isFinite(year) || !$isFinite(month) || !$isFinite(date)) return $NaN; | 321 if (!$isFinite(year) || !$isFinite(month) || !$isFinite(date)) return $NaN; |
| 321 | 322 |
| 322 // Conversion to integers. | 323 // Conversion to integers. |
| 323 year = TO_INTEGER(year); | 324 year = TO_INTEGER(year); |
| 324 month = TO_INTEGER(month); | 325 month = TO_INTEGER(month); |
| 325 date = TO_INTEGER(date); | 326 date = TO_INTEGER(date); |
| 326 | 327 |
| 327 // Overflow months into year. | 328 // Overflow months into year. |
| 328 year = year + $floor(month/12); | 329 year = year + $floor(month/12); |
| 329 month = month % 12; | 330 month = month % 12; |
| 330 if (month < 0) { | 331 if (month < 0) { |
| 331 month += 12; | 332 month += 12; |
| 332 } | 333 } |
| 333 | 334 |
| 334 // Return days relative to Jan 1 1970. | 335 // Return days relative to Jan 1 1970. |
| 335 return ToJulianDay(year, month, date) - kDayZeroInJulianDay; | 336 return ToJulianDay(year, month, date) - kDayZeroInJulianDay; |
| 336 }; | 337 } |
| 337 | 338 |
| 338 | 339 |
| 339 // ECMA 262 - 15.9.1.13 | 340 // ECMA 262 - 15.9.1.13 |
| 340 function MakeDate(day, time) { | 341 function MakeDate(day, time) { |
| 341 if (!$isFinite(day)) return $NaN; | 342 if (!$isFinite(day)) return $NaN; |
| 342 if (!$isFinite(time)) return $NaN; | 343 if (!$isFinite(time)) return $NaN; |
| 343 return day * msPerDay + time; | 344 return day * msPerDay + time; |
| 344 }; | 345 } |
| 345 | 346 |
| 346 | 347 |
| 347 // ECMA 262 - 15.9.1.14 | 348 // ECMA 262 - 15.9.1.14 |
| 348 function TimeClip(time) { | 349 function TimeClip(time) { |
| 349 if (!$isFinite(time)) return $NaN; | 350 if (!$isFinite(time)) return $NaN; |
| 350 if ($abs(time) > 8.64E15) return $NaN; | 351 if ($abs(time) > 8.64E15) return $NaN; |
| 351 return TO_INTEGER(time); | 352 return TO_INTEGER(time); |
| 352 }; | 353 } |
| 353 | 354 |
| 354 | 355 |
| 355 %SetCode($Date, function(year, month, date, hours, minutes, seconds, ms) { | 356 %SetCode($Date, function(year, month, date, hours, minutes, seconds, ms) { |
| 356 if (%IsConstructCall()) { | 357 if (%IsConstructCall()) { |
| 357 // ECMA 262 - 15.9.3 | 358 // ECMA 262 - 15.9.3 |
| 358 var argc = %_ArgumentsLength(); | 359 var argc = %_ArgumentsLength(); |
| 359 if (argc == 0) { | 360 if (argc == 0) { |
| 360 %_SetValueOf(this, %DateCurrentTime()); | 361 %_SetValueOf(this, %DateCurrentTime()); |
| 361 return; | 362 return; |
| 362 } | 363 } |
| (...skipping 29 matching lines...) Expand all Loading... |
| 392 // ECMA 262 - 15.9.2 | 393 // ECMA 262 - 15.9.2 |
| 393 return (new $Date()).toString(); | 394 return (new $Date()).toString(); |
| 394 } | 395 } |
| 395 }); | 396 }); |
| 396 | 397 |
| 397 | 398 |
| 398 // Helper functions. | 399 // Helper functions. |
| 399 function GetTimeFrom(aDate) { | 400 function GetTimeFrom(aDate) { |
| 400 if (IS_DATE(aDate)) return %_ValueOf(aDate); | 401 if (IS_DATE(aDate)) return %_ValueOf(aDate); |
| 401 throw new $TypeError('this is not a Date object.'); | 402 throw new $TypeError('this is not a Date object.'); |
| 402 }; | 403 } |
| 403 | 404 |
| 404 | 405 |
| 405 function GetMillisecondsFrom(aDate) { | 406 function GetMillisecondsFrom(aDate) { |
| 406 var t = GetTimeFrom(aDate); | 407 var t = GetTimeFrom(aDate); |
| 407 if ($isNaN(t)) return t; | 408 if ($isNaN(t)) return t; |
| 408 return msFromTime(LocalTime(t)); | 409 return msFromTime(LocalTime(t)); |
| 409 }; | 410 } |
| 410 | 411 |
| 411 | 412 |
| 412 function GetUTCMillisecondsFrom(aDate) { | 413 function GetUTCMillisecondsFrom(aDate) { |
| 413 var t = GetTimeFrom(aDate); | 414 var t = GetTimeFrom(aDate); |
| 414 if ($isNaN(t)) return t; | 415 if ($isNaN(t)) return t; |
| 415 return msFromTime(t); | 416 return msFromTime(t); |
| 416 }; | 417 } |
| 417 | 418 |
| 418 | 419 |
| 419 function GetSecondsFrom(aDate) { | 420 function GetSecondsFrom(aDate) { |
| 420 var t = GetTimeFrom(aDate); | 421 var t = GetTimeFrom(aDate); |
| 421 if ($isNaN(t)) return t; | 422 if ($isNaN(t)) return t; |
| 422 return SecFromTime(LocalTime(t)); | 423 return SecFromTime(LocalTime(t)); |
| 423 }; | 424 } |
| 424 | 425 |
| 425 | 426 |
| 426 function GetUTCSecondsFrom(aDate) { | 427 function GetUTCSecondsFrom(aDate) { |
| 427 var t = GetTimeFrom(aDate); | 428 var t = GetTimeFrom(aDate); |
| 428 if ($isNaN(t)) return t; | 429 if ($isNaN(t)) return t; |
| 429 return SecFromTime(t); | 430 return SecFromTime(t); |
| 430 }; | 431 } |
| 431 | 432 |
| 432 | 433 |
| 433 function GetMinutesFrom(aDate) { | 434 function GetMinutesFrom(aDate) { |
| 434 var t = GetTimeFrom(aDate); | 435 var t = GetTimeFrom(aDate); |
| 435 if ($isNaN(t)) return t; | 436 if ($isNaN(t)) return t; |
| 436 return MinFromTime(LocalTime(t)); | 437 return MinFromTime(LocalTime(t)); |
| 437 }; | 438 } |
| 438 | 439 |
| 439 | 440 |
| 440 function GetUTCMinutesFrom(aDate) { | 441 function GetUTCMinutesFrom(aDate) { |
| 441 var t = GetTimeFrom(aDate); | 442 var t = GetTimeFrom(aDate); |
| 442 if ($isNaN(t)) return t; | 443 if ($isNaN(t)) return t; |
| 443 return MinFromTime(t); | 444 return MinFromTime(t); |
| 444 }; | 445 } |
| 445 | 446 |
| 446 | 447 |
| 447 function GetHoursFrom(aDate) { | 448 function GetHoursFrom(aDate) { |
| 448 var t = GetTimeFrom(aDate); | 449 var t = GetTimeFrom(aDate); |
| 449 if ($isNaN(t)) return t; | 450 if ($isNaN(t)) return t; |
| 450 return HourFromTime(LocalTime(t)); | 451 return HourFromTime(LocalTime(t)); |
| 451 }; | 452 } |
| 452 | 453 |
| 453 | 454 |
| 454 function GetUTCHoursFrom(aDate) { | 455 function GetUTCHoursFrom(aDate) { |
| 455 var t = GetTimeFrom(aDate); | 456 var t = GetTimeFrom(aDate); |
| 456 if ($isNaN(t)) return t; | 457 if ($isNaN(t)) return t; |
| 457 return HourFromTime(t); | 458 return HourFromTime(t); |
| 458 }; | 459 } |
| 459 | 460 |
| 460 | 461 |
| 461 function GetFullYearFrom(aDate) { | 462 function GetFullYearFrom(aDate) { |
| 462 var t = GetTimeFrom(aDate); | 463 var t = GetTimeFrom(aDate); |
| 463 if ($isNaN(t)) return t; | 464 if ($isNaN(t)) return t; |
| 464 return YearFromTime(LocalTime(t)); | 465 return YearFromTime(LocalTime(t)); |
| 465 }; | 466 } |
| 466 | 467 |
| 467 | 468 |
| 468 function GetUTCFullYearFrom(aDate) { | 469 function GetUTCFullYearFrom(aDate) { |
| 469 var t = GetTimeFrom(aDate); | 470 var t = GetTimeFrom(aDate); |
| 470 if ($isNaN(t)) return t; | 471 if ($isNaN(t)) return t; |
| 471 return YearFromTime(t); | 472 return YearFromTime(t); |
| 472 }; | 473 } |
| 473 | 474 |
| 474 | 475 |
| 475 function GetMonthFrom(aDate) { | 476 function GetMonthFrom(aDate) { |
| 476 var t = GetTimeFrom(aDate); | 477 var t = GetTimeFrom(aDate); |
| 477 if ($isNaN(t)) return t; | 478 if ($isNaN(t)) return t; |
| 478 return MonthFromTime(LocalTime(t)); | 479 return MonthFromTime(LocalTime(t)); |
| 479 }; | 480 } |
| 480 | 481 |
| 481 | 482 |
| 482 function GetUTCMonthFrom(aDate) { | 483 function GetUTCMonthFrom(aDate) { |
| 483 var t = GetTimeFrom(aDate); | 484 var t = GetTimeFrom(aDate); |
| 484 if ($isNaN(t)) return t; | 485 if ($isNaN(t)) return t; |
| 485 return MonthFromTime(t); | 486 return MonthFromTime(t); |
| 486 }; | 487 } |
| 487 | 488 |
| 488 | 489 |
| 489 function GetDateFrom(aDate) { | 490 function GetDateFrom(aDate) { |
| 490 var t = GetTimeFrom(aDate); | 491 var t = GetTimeFrom(aDate); |
| 491 if ($isNaN(t)) return t; | 492 if ($isNaN(t)) return t; |
| 492 return DateFromTime(LocalTime(t)); | 493 return DateFromTime(LocalTime(t)); |
| 493 }; | 494 } |
| 494 | 495 |
| 495 | 496 |
| 496 function GetUTCDateFrom(aDate) { | 497 function GetUTCDateFrom(aDate) { |
| 497 var t = GetTimeFrom(aDate); | 498 var t = GetTimeFrom(aDate); |
| 498 if ($isNaN(t)) return t; | 499 if ($isNaN(t)) return t; |
| 499 return DateFromTime(t); | 500 return DateFromTime(t); |
| 500 }; | 501 } |
| 501 | 502 |
| 502 | 503 |
| 503 %FunctionSetPrototype($Date, new $Date($NaN)); | 504 %FunctionSetPrototype($Date, new $Date($NaN)); |
| 504 | 505 |
| 505 | 506 |
| 506 var WeekDays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']; | 507 var WeekDays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']; |
| 507 var Months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oc
t', 'Nov', 'Dec']; | 508 var Months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oc
t', 'Nov', 'Dec']; |
| 508 | 509 |
| 509 | 510 |
| 510 function TwoDigitString(value) { | 511 function TwoDigitString(value) { |
| 511 return value < 10 ? "0" + value : "" + value; | 512 return value < 10 ? "0" + value : "" + value; |
| 512 }; | 513 } |
| 513 | 514 |
| 514 | 515 |
| 515 function DateString(time) { | 516 function DateString(time) { |
| 516 var YMD = FromJulianDay(Day(time) + kDayZeroInJulianDay); | 517 var YMD = FromJulianDay(Day(time) + kDayZeroInJulianDay); |
| 517 return WeekDays[WeekDay(time)] + ' ' | 518 return WeekDays[WeekDay(time)] + ' ' |
| 518 + Months[YMD.month] + ' ' | 519 + Months[YMD.month] + ' ' |
| 519 + TwoDigitString(YMD.date) + ' ' | 520 + TwoDigitString(YMD.date) + ' ' |
| 520 + YMD.year; | 521 + YMD.year; |
| 521 }; | 522 } |
| 522 | 523 |
| 523 | 524 |
| 524 function TimeString(time) { | 525 function TimeString(time) { |
| 525 return TwoDigitString(HourFromTime(time)) + ':' | 526 return TwoDigitString(HourFromTime(time)) + ':' |
| 526 + TwoDigitString(MinFromTime(time)) + ':' | 527 + TwoDigitString(MinFromTime(time)) + ':' |
| 527 + TwoDigitString(SecFromTime(time)); | 528 + TwoDigitString(SecFromTime(time)); |
| 528 }; | 529 } |
| 529 | 530 |
| 530 | 531 |
| 531 function LocalTimezoneString(time) { | 532 function LocalTimezoneString(time) { |
| 532 var timezoneOffset = (LocalTimeOffset() + DaylightSavingsOffset(time)) / msPer
Minute; | 533 var timezoneOffset = (LocalTimeOffset() + DaylightSavingsOffset(time)) / msPer
Minute; |
| 533 var sign = (timezoneOffset >= 0) ? 1 : -1; | 534 var sign = (timezoneOffset >= 0) ? 1 : -1; |
| 534 var hours = $floor((sign * timezoneOffset)/60); | 535 var hours = $floor((sign * timezoneOffset)/60); |
| 535 var min = $floor((sign * timezoneOffset)%60); | 536 var min = $floor((sign * timezoneOffset)%60); |
| 536 var gmt = ' GMT' + ((sign == 1) ? '+' : '-') + TwoDigitString(hours) + TwoDigi
tString(min); | 537 var gmt = ' GMT' + ((sign == 1) ? '+' : '-') + TwoDigitString(hours) + TwoDigi
tString(min); |
| 537 return gmt + ' (' + LocalTimezone(time) + ')'; | 538 return gmt + ' (' + LocalTimezone(time) + ')'; |
| 538 }; | 539 } |
| 539 | 540 |
| 540 | 541 |
| 541 function DatePrintString(time) { | 542 function DatePrintString(time) { |
| 542 return DateString(time) + ' ' + TimeString(time); | 543 return DateString(time) + ' ' + TimeString(time); |
| 543 }; | 544 } |
| 544 | 545 |
| 545 // ------------------------------------------------------------------- | 546 // ------------------------------------------------------------------- |
| 546 | 547 |
| 547 | 548 |
| 548 // ECMA 262 - 15.9.4.2 | 549 // ECMA 262 - 15.9.4.2 |
| 549 function DateParse(string) { | 550 function DateParse(string) { |
| 550 var arr = %DateParseString(ToString(string)); | 551 var arr = %DateParseString(ToString(string)); |
| 551 if (IS_NULL(arr)) return $NaN; | 552 if (IS_NULL(arr)) return $NaN; |
| 552 | 553 |
| 553 var day = MakeDay(arr[0], arr[1], arr[2]); | 554 var day = MakeDay(arr[0], arr[1], arr[2]); |
| 554 var time = MakeTime(arr[3], arr[4], arr[5], 0); | 555 var time = MakeTime(arr[3], arr[4], arr[5], 0); |
| 555 var date = MakeDate(day, time); | 556 var date = MakeDate(day, time); |
| 556 | 557 |
| 557 if (IS_NULL(arr[6])) { | 558 if (IS_NULL(arr[6])) { |
| 558 return TimeClip(UTC(date)); | 559 return TimeClip(UTC(date)); |
| 559 } else { | 560 } else { |
| 560 return TimeClip(date - arr[6] * 1000); | 561 return TimeClip(date - arr[6] * 1000); |
| 561 } | 562 } |
| 562 }; | 563 } |
| 563 | 564 |
| 564 | 565 |
| 565 // ECMA 262 - 15.9.4.3 | 566 // ECMA 262 - 15.9.4.3 |
| 566 function DateUTC(year, month, date, hours, minutes, seconds, ms) { | 567 function DateUTC(year, month, date, hours, minutes, seconds, ms) { |
| 567 year = ToNumber(year); | 568 year = ToNumber(year); |
| 568 month = ToNumber(month); | 569 month = ToNumber(month); |
| 569 var argc = %_ArgumentsLength(); | 570 var argc = %_ArgumentsLength(); |
| 570 date = argc > 2 ? ToNumber(date) : 1; | 571 date = argc > 2 ? ToNumber(date) : 1; |
| 571 hours = argc > 3 ? ToNumber(hours) : 0; | 572 hours = argc > 3 ? ToNumber(hours) : 0; |
| 572 minutes = argc > 4 ? ToNumber(minutes) : 0; | 573 minutes = argc > 4 ? ToNumber(minutes) : 0; |
| 573 seconds = argc > 5 ? ToNumber(seconds) : 0; | 574 seconds = argc > 5 ? ToNumber(seconds) : 0; |
| 574 ms = argc > 6 ? ToNumber(ms) : 0; | 575 ms = argc > 6 ? ToNumber(ms) : 0; |
| 575 year = (!$isNaN(year) && 0 <= TO_INTEGER(year) && TO_INTEGER(year) <= 99) | 576 year = (!$isNaN(year) && 0 <= TO_INTEGER(year) && TO_INTEGER(year) <= 99) |
| 576 ? 1900 + TO_INTEGER(year) : year; | 577 ? 1900 + TO_INTEGER(year) : year; |
| 577 var day = MakeDay(year, month, date); | 578 var day = MakeDay(year, month, date); |
| 578 var time = MakeTime(hours, minutes, seconds, ms); | 579 var time = MakeTime(hours, minutes, seconds, ms); |
| 579 return %_SetValueOf(this, TimeClip(MakeDate(day, time))); | 580 return %_SetValueOf(this, TimeClip(MakeDate(day, time))); |
| 580 }; | 581 } |
| 581 | 582 |
| 582 | 583 |
| 583 // Mozilla-specific extension. Returns the number of milliseconds | 584 // Mozilla-specific extension. Returns the number of milliseconds |
| 584 // elapsed since 1 January 1970 00:00:00 UTC. | 585 // elapsed since 1 January 1970 00:00:00 UTC. |
| 585 function DateNow() { | 586 function DateNow() { |
| 586 return %DateCurrentTime(); | 587 return %DateCurrentTime(); |
| 587 }; | 588 } |
| 588 | 589 |
| 589 | 590 |
| 590 // ECMA 262 - 15.9.5.2 | 591 // ECMA 262 - 15.9.5.2 |
| 591 function DateToString() { | 592 function DateToString() { |
| 592 var t = GetTimeFrom(this); | 593 var t = GetTimeFrom(this); |
| 593 if ($isNaN(t)) return kInvalidDate; | 594 if ($isNaN(t)) return kInvalidDate; |
| 594 return DatePrintString(LocalTime(t)) + LocalTimezoneString(t); | 595 return DatePrintString(LocalTime(t)) + LocalTimezoneString(t); |
| 595 }; | 596 } |
| 596 | 597 |
| 597 | 598 |
| 598 // ECMA 262 - 15.9.5.3 | 599 // ECMA 262 - 15.9.5.3 |
| 599 function DateToDateString() { | 600 function DateToDateString() { |
| 600 var t = GetTimeFrom(this); | 601 var t = GetTimeFrom(this); |
| 601 if ($isNaN(t)) return kInvalidDate; | 602 if ($isNaN(t)) return kInvalidDate; |
| 602 return DateString(LocalTime(t)); | 603 return DateString(LocalTime(t)); |
| 603 }; | 604 } |
| 604 | 605 |
| 605 | 606 |
| 606 // ECMA 262 - 15.9.5.4 | 607 // ECMA 262 - 15.9.5.4 |
| 607 function DateToTimeString() { | 608 function DateToTimeString() { |
| 608 var t = GetTimeFrom(this); | 609 var t = GetTimeFrom(this); |
| 609 if ($isNaN(t)) return kInvalidDate; | 610 if ($isNaN(t)) return kInvalidDate; |
| 610 var lt = LocalTime(t); | 611 var lt = LocalTime(t); |
| 611 return TimeString(lt) + LocalTimezoneString(lt); | 612 return TimeString(lt) + LocalTimezoneString(lt); |
| 612 }; | 613 } |
| 614 |
| 615 |
| 616 // ECMA 262 - 15.9.5.5 |
| 617 function DateToLocaleString() { |
| 618 return DateToString.call(this); |
| 619 } |
| 620 |
| 621 |
| 622 // ECMA 262 - 15.9.5.6 |
| 623 function DateToLocaleDateString() { |
| 624 return DateToDateString.call(this); |
| 625 } |
| 613 | 626 |
| 614 | 627 |
| 615 // ECMA 262 - 15.9.5.7 | 628 // ECMA 262 - 15.9.5.7 |
| 616 function DateToLocaleTimeString() { | 629 function DateToLocaleTimeString() { |
| 617 var t = GetTimeFrom(this); | 630 var t = GetTimeFrom(this); |
| 618 if ($isNaN(t)) return kInvalidDate; | 631 if ($isNaN(t)) return kInvalidDate; |
| 619 var lt = LocalTime(t); | 632 var lt = LocalTime(t); |
| 620 return TimeString(lt); | 633 return TimeString(lt); |
| 621 }; | 634 } |
| 635 |
| 636 |
| 637 // ECMA 262 - 15.9.5.8 |
| 638 function DateValueOf() { |
| 639 return GetTimeFrom(this); |
| 640 } |
| 622 | 641 |
| 623 | 642 |
| 624 // ECMA 262 - 15.9.5.9 | 643 // ECMA 262 - 15.9.5.9 |
| 625 function DateGetTime() { | 644 function DateGetTime() { |
| 626 return GetTimeFrom(this); | 645 return GetTimeFrom(this); |
| 627 } | 646 } |
| 628 | 647 |
| 629 | 648 |
| 630 // ECMA 262 - 15.9.5.10 | 649 // ECMA 262 - 15.9.5.10 |
| 631 function DateGetFullYear() { | 650 function DateGetFullYear() { |
| 632 return GetFullYearFrom(this) | 651 return GetFullYearFrom(this) |
| 633 }; | 652 } |
| 634 | 653 |
| 635 | 654 |
| 636 // ECMA 262 - 15.9.5.11 | 655 // ECMA 262 - 15.9.5.11 |
| 637 function DateGetUTCFullYear() { | 656 function DateGetUTCFullYear() { |
| 638 return GetUTCFullYearFrom(this) | 657 return GetUTCFullYearFrom(this) |
| 639 }; | 658 } |
| 640 | 659 |
| 641 | 660 |
| 642 // ECMA 262 - 15.9.5.12 | 661 // ECMA 262 - 15.9.5.12 |
| 643 function DateGetMonth() { | 662 function DateGetMonth() { |
| 644 return GetMonthFrom(this); | 663 return GetMonthFrom(this); |
| 645 }; | 664 } |
| 646 | 665 |
| 647 | 666 |
| 648 // ECMA 262 - 15.9.5.13 | 667 // ECMA 262 - 15.9.5.13 |
| 649 function DateGetUTCMonth() { | 668 function DateGetUTCMonth() { |
| 650 return GetUTCMonthFrom(this); | 669 return GetUTCMonthFrom(this); |
| 651 }; | 670 } |
| 652 | 671 |
| 653 | 672 |
| 654 // ECMA 262 - 15.9.5.14 | 673 // ECMA 262 - 15.9.5.14 |
| 655 function DateGetDate() { | 674 function DateGetDate() { |
| 656 return GetDateFrom(this); | 675 return GetDateFrom(this); |
| 657 }; | 676 } |
| 658 | 677 |
| 659 | 678 |
| 660 // ECMA 262 - 15.9.5.15 | 679 // ECMA 262 - 15.9.5.15 |
| 661 function DateGetUTCDate() { | 680 function DateGetUTCDate() { |
| 662 return GetUTCDateFrom(this); | 681 return GetUTCDateFrom(this); |
| 663 }; | 682 } |
| 664 | 683 |
| 665 | 684 |
| 666 // ECMA 262 - 15.9.5.16 | 685 // ECMA 262 - 15.9.5.16 |
| 667 function DateGetDay() { | 686 function DateGetDay() { |
| 668 var t = GetTimeFrom(this); | 687 var t = GetTimeFrom(this); |
| 669 if ($isNaN(t)) return t; | 688 if ($isNaN(t)) return t; |
| 670 return WeekDay(LocalTime(t)); | 689 return WeekDay(LocalTime(t)); |
| 671 }; | 690 } |
| 672 | 691 |
| 673 | 692 |
| 674 // ECMA 262 - 15.9.5.17 | 693 // ECMA 262 - 15.9.5.17 |
| 675 function DateGetUTCDay() { | 694 function DateGetUTCDay() { |
| 676 var t = GetTimeFrom(this); | 695 var t = GetTimeFrom(this); |
| 677 if ($isNaN(t)) return t; | 696 if ($isNaN(t)) return t; |
| 678 return WeekDay(t); | 697 return WeekDay(t); |
| 679 }; | 698 } |
| 680 | 699 |
| 681 | 700 |
| 682 // ECMA 262 - 15.9.5.18 | 701 // ECMA 262 - 15.9.5.18 |
| 683 function DateGetHours() { | 702 function DateGetHours() { |
| 684 return GetHoursFrom(this); | 703 return GetHoursFrom(this); |
| 685 }; | 704 } |
| 686 | 705 |
| 687 | 706 |
| 688 // ECMA 262 - 15.9.5.19 | 707 // ECMA 262 - 15.9.5.19 |
| 689 function DateGetUTCHours() { | 708 function DateGetUTCHours() { |
| 690 return GetUTCHoursFrom(this); | 709 return GetUTCHoursFrom(this); |
| 691 }; | 710 } |
| 692 | 711 |
| 693 | 712 |
| 694 // ECMA 262 - 15.9.5.20 | 713 // ECMA 262 - 15.9.5.20 |
| 695 function DateGetMinutes() { | 714 function DateGetMinutes() { |
| 696 return GetMinutesFrom(this); | 715 return GetMinutesFrom(this); |
| 697 }; | 716 } |
| 698 | 717 |
| 699 | 718 |
| 700 // ECMA 262 - 15.9.5.21 | 719 // ECMA 262 - 15.9.5.21 |
| 701 function DateGetUTCMinutes() { | 720 function DateGetUTCMinutes() { |
| 702 return GetUTCMinutesFrom(this); | 721 return GetUTCMinutesFrom(this); |
| 703 }; | 722 } |
| 704 | 723 |
| 705 | 724 |
| 706 // ECMA 262 - 15.9.5.22 | 725 // ECMA 262 - 15.9.5.22 |
| 707 function DateGetSeconds() { | 726 function DateGetSeconds() { |
| 708 return GetSecondsFrom(this); | 727 return GetSecondsFrom(this); |
| 709 }; | 728 } |
| 710 | 729 |
| 711 | 730 |
| 712 // ECMA 262 - 15.9.5.23 | 731 // ECMA 262 - 15.9.5.23 |
| 713 function DateGetUTCSeconds() { | 732 function DateGetUTCSeconds() { |
| 714 return GetUTCSecondsFrom(this); | 733 return GetUTCSecondsFrom(this); |
| 715 }; | 734 } |
| 716 | 735 |
| 717 | 736 |
| 718 // ECMA 262 - 15.9.5.24 | 737 // ECMA 262 - 15.9.5.24 |
| 719 function DateGetMilliseconds() { | 738 function DateGetMilliseconds() { |
| 720 return GetMillisecondsFrom(this); | 739 return GetMillisecondsFrom(this); |
| 721 }; | 740 } |
| 722 | 741 |
| 723 | 742 |
| 724 // ECMA 262 - 15.9.5.25 | 743 // ECMA 262 - 15.9.5.25 |
| 725 function DateGetUTCMilliseconds() { | 744 function DateGetUTCMilliseconds() { |
| 726 return GetUTCMillisecondsFrom(this); | 745 return GetUTCMillisecondsFrom(this); |
| 727 }; | 746 } |
| 728 | 747 |
| 729 | 748 |
| 730 // ECMA 262 - 15.9.5.26 | 749 // ECMA 262 - 15.9.5.26 |
| 731 function DateGetTimezoneOffset() { | 750 function DateGetTimezoneOffset() { |
| 732 var t = GetTimeFrom(this); | 751 var t = GetTimeFrom(this); |
| 733 if ($isNaN(t)) return t; | 752 if ($isNaN(t)) return t; |
| 734 return (t - LocalTime(t)) / msPerMinute; | 753 return (t - LocalTime(t)) / msPerMinute; |
| 735 }; | 754 } |
| 736 | 755 |
| 737 | 756 |
| 738 // ECMA 262 - 15.9.5.27 | 757 // ECMA 262 - 15.9.5.27 |
| 739 function DateSetTime(ms) { | 758 function DateSetTime(ms) { |
| 740 if (!IS_DATE(this)) throw new $TypeError('this is not a Date object.'); | 759 if (!IS_DATE(this)) throw new $TypeError('this is not a Date object.'); |
| 741 return %_SetValueOf(this, TimeClip(ToNumber(ms))); | 760 return %_SetValueOf(this, TimeClip(ToNumber(ms))); |
| 742 }; | 761 } |
| 743 | 762 |
| 744 | 763 |
| 745 // ECMA 262 - 15.9.5.28 | 764 // ECMA 262 - 15.9.5.28 |
| 746 function DateSetMilliseconds(ms) { | 765 function DateSetMilliseconds(ms) { |
| 747 var t = LocalTime(GetTimeFrom(this)); | 766 var t = LocalTime(GetTimeFrom(this)); |
| 748 ms = ToNumber(ms); | 767 ms = ToNumber(ms); |
| 749 var time = MakeTime(HourFromTime(t), MinFromTime(t), SecFromTime(t), ms); | 768 var time = MakeTime(HourFromTime(t), MinFromTime(t), SecFromTime(t), ms); |
| 750 return %_SetValueOf(this, TimeClip(UTC(MakeDate(Day(t), time)))); | 769 return %_SetValueOf(this, TimeClip(UTC(MakeDate(Day(t), time)))); |
| 751 }; | 770 } |
| 752 | 771 |
| 753 | 772 |
| 754 // ECMA 262 - 15.9.5.29 | 773 // ECMA 262 - 15.9.5.29 |
| 755 function DateSetUTCMilliseconds(ms) { | 774 function DateSetUTCMilliseconds(ms) { |
| 756 var t = GetTimeFrom(this); | 775 var t = GetTimeFrom(this); |
| 757 ms = ToNumber(ms); | 776 ms = ToNumber(ms); |
| 758 var time = MakeTime(HourFromTime(t), MinFromTime(t), SecFromTime(t), ms); | 777 var time = MakeTime(HourFromTime(t), MinFromTime(t), SecFromTime(t), ms); |
| 759 return %_SetValueOf(this, TimeClip(MakeDate(Day(t), time))); | 778 return %_SetValueOf(this, TimeClip(MakeDate(Day(t), time))); |
| 760 }; | 779 } |
| 761 | 780 |
| 762 | 781 |
| 763 // ECMA 262 - 15.9.5.30 | 782 // ECMA 262 - 15.9.5.30 |
| 764 function DateSetSeconds(sec, ms) { | 783 function DateSetSeconds(sec, ms) { |
| 765 var t = LocalTime(GetTimeFrom(this)); | 784 var t = LocalTime(GetTimeFrom(this)); |
| 766 sec = ToNumber(sec); | 785 sec = ToNumber(sec); |
| 767 ms = %_ArgumentsLength() < 2 ? GetMillisecondsFrom(this) : ToNumber(ms); | 786 ms = %_ArgumentsLength() < 2 ? GetMillisecondsFrom(this) : ToNumber(ms); |
| 768 var time = MakeTime(HourFromTime(t), MinFromTime(t), sec, ms); | 787 var time = MakeTime(HourFromTime(t), MinFromTime(t), sec, ms); |
| 769 return %_SetValueOf(this, TimeClip(UTC(MakeDate(Day(t), time)))); | 788 return %_SetValueOf(this, TimeClip(UTC(MakeDate(Day(t), time)))); |
| 770 }; | 789 } |
| 771 | 790 |
| 772 | 791 |
| 773 // ECMA 262 - 15.9.5.31 | 792 // ECMA 262 - 15.9.5.31 |
| 774 function DateSetUTCSeconds(sec, ms) { | 793 function DateSetUTCSeconds(sec, ms) { |
| 775 var t = GetTimeFrom(this); | 794 var t = GetTimeFrom(this); |
| 776 sec = ToNumber(sec); | 795 sec = ToNumber(sec); |
| 777 ms = %_ArgumentsLength() < 2 ? GetUTCMillisecondsFrom(this) : ToNumber(ms); | 796 ms = %_ArgumentsLength() < 2 ? GetUTCMillisecondsFrom(this) : ToNumber(ms); |
| 778 var time = MakeTime(HourFromTime(t), MinFromTime(t), sec, ms); | 797 var time = MakeTime(HourFromTime(t), MinFromTime(t), sec, ms); |
| 779 return %_SetValueOf(this, TimeClip(MakeDate(Day(t), time))); | 798 return %_SetValueOf(this, TimeClip(MakeDate(Day(t), time))); |
| 780 }; | 799 } |
| 781 | 800 |
| 782 | 801 |
| 783 // ECMA 262 - 15.9.5.33 | 802 // ECMA 262 - 15.9.5.33 |
| 784 function DateSetMinutes(min, sec, ms) { | 803 function DateSetMinutes(min, sec, ms) { |
| 785 var t = LocalTime(GetTimeFrom(this)); | 804 var t = LocalTime(GetTimeFrom(this)); |
| 786 min = ToNumber(min); | 805 min = ToNumber(min); |
| 787 var argc = %_ArgumentsLength(); | 806 var argc = %_ArgumentsLength(); |
| 788 sec = argc < 2 ? GetSecondsFrom(this) : ToNumber(sec); | 807 sec = argc < 2 ? GetSecondsFrom(this) : ToNumber(sec); |
| 789 ms = argc < 3 ? GetMillisecondsFrom(this) : ToNumber(ms); | 808 ms = argc < 3 ? GetMillisecondsFrom(this) : ToNumber(ms); |
| 790 var time = MakeTime(HourFromTime(t), min, sec, ms); | 809 var time = MakeTime(HourFromTime(t), min, sec, ms); |
| 791 return %_SetValueOf(this, TimeClip(UTC(MakeDate(Day(t), time)))); | 810 return %_SetValueOf(this, TimeClip(UTC(MakeDate(Day(t), time)))); |
| 792 }; | 811 } |
| 793 | 812 |
| 794 | 813 |
| 795 // ECMA 262 - 15.9.5.34 | 814 // ECMA 262 - 15.9.5.34 |
| 796 function DateSetUTCMinutes(min, sec, ms) { | 815 function DateSetUTCMinutes(min, sec, ms) { |
| 797 var t = GetTimeFrom(this); | 816 var t = GetTimeFrom(this); |
| 798 min = ToNumber(min); | 817 min = ToNumber(min); |
| 799 var argc = %_ArgumentsLength(); | 818 var argc = %_ArgumentsLength(); |
| 800 sec = argc < 2 ? GetUTCSecondsFrom(this) : ToNumber(sec); | 819 sec = argc < 2 ? GetUTCSecondsFrom(this) : ToNumber(sec); |
| 801 ms = argc < 3 ? GetUTCMillisecondsFrom(this) : ToNumber(ms); | 820 ms = argc < 3 ? GetUTCMillisecondsFrom(this) : ToNumber(ms); |
| 802 var time = MakeTime(HourFromTime(t), min, sec, ms); | 821 var time = MakeTime(HourFromTime(t), min, sec, ms); |
| 803 return %_SetValueOf(this, TimeClip(MakeDate(Day(t), time))); | 822 return %_SetValueOf(this, TimeClip(MakeDate(Day(t), time))); |
| 804 }; | 823 } |
| 805 | 824 |
| 806 | 825 |
| 807 // ECMA 262 - 15.9.5.35 | 826 // ECMA 262 - 15.9.5.35 |
| 808 function DateSetHours(hour, min, sec, ms) { | 827 function DateSetHours(hour, min, sec, ms) { |
| 809 var t = LocalTime(GetTimeFrom(this)); | 828 var t = LocalTime(GetTimeFrom(this)); |
| 810 hour = ToNumber(hour); | 829 hour = ToNumber(hour); |
| 811 var argc = %_ArgumentsLength(); | 830 var argc = %_ArgumentsLength(); |
| 812 min = argc < 2 ? GetMinutesFrom(this) : ToNumber(min); | 831 min = argc < 2 ? GetMinutesFrom(this) : ToNumber(min); |
| 813 sec = argc < 3 ? GetSecondsFrom(this) : ToNumber(sec); | 832 sec = argc < 3 ? GetSecondsFrom(this) : ToNumber(sec); |
| 814 ms = argc < 4 ? GetMillisecondsFrom(this) : ToNumber(ms); | 833 ms = argc < 4 ? GetMillisecondsFrom(this) : ToNumber(ms); |
| 815 var time = MakeTime(hour, min, sec, ms); | 834 var time = MakeTime(hour, min, sec, ms); |
| 816 return %_SetValueOf(this, TimeClip(UTC(MakeDate(Day(t), time)))); | 835 return %_SetValueOf(this, TimeClip(UTC(MakeDate(Day(t), time)))); |
| 817 }; | 836 } |
| 818 | 837 |
| 819 | 838 |
| 820 // ECMA 262 - 15.9.5.34 | 839 // ECMA 262 - 15.9.5.34 |
| 821 function DateSetUTCHours(hour, min, sec, ms) { | 840 function DateSetUTCHours(hour, min, sec, ms) { |
| 822 var t = GetTimeFrom(this); | 841 var t = GetTimeFrom(this); |
| 823 hour = ToNumber(hour); | 842 hour = ToNumber(hour); |
| 824 var argc = %_ArgumentsLength(); | 843 var argc = %_ArgumentsLength(); |
| 825 min = argc < 2 ? GetUTCMinutesFrom(this) : ToNumber(min); | 844 min = argc < 2 ? GetUTCMinutesFrom(this) : ToNumber(min); |
| 826 sec = argc < 3 ? GetUTCSecondsFrom(this) : ToNumber(sec); | 845 sec = argc < 3 ? GetUTCSecondsFrom(this) : ToNumber(sec); |
| 827 ms = argc < 4 ? GetUTCMillisecondsFrom(this) : ToNumber(ms); | 846 ms = argc < 4 ? GetUTCMillisecondsFrom(this) : ToNumber(ms); |
| 828 var time = MakeTime(hour, min, sec, ms); | 847 var time = MakeTime(hour, min, sec, ms); |
| 829 return %_SetValueOf(this, TimeClip(MakeDate(Day(t), time))); | 848 return %_SetValueOf(this, TimeClip(MakeDate(Day(t), time))); |
| 830 }; | 849 } |
| 831 | 850 |
| 832 | 851 |
| 833 // ECMA 262 - 15.9.5.36 | 852 // ECMA 262 - 15.9.5.36 |
| 834 function DateSetDate(date) { | 853 function DateSetDate(date) { |
| 835 var t = LocalTime(GetTimeFrom(this)); | 854 var t = LocalTime(GetTimeFrom(this)); |
| 836 date = ToNumber(date); | 855 date = ToNumber(date); |
| 837 var day = MakeDay(YearFromTime(t), MonthFromTime(t), date); | 856 var day = MakeDay(YearFromTime(t), MonthFromTime(t), date); |
| 838 return %_SetValueOf(this, TimeClip(UTC(MakeDate(day, TimeWithinDay(t))))); | 857 return %_SetValueOf(this, TimeClip(UTC(MakeDate(day, TimeWithinDay(t))))); |
| 839 }; | 858 } |
| 840 | 859 |
| 841 | 860 |
| 842 // ECMA 262 - 15.9.5.37 | 861 // ECMA 262 - 15.9.5.37 |
| 843 function DateSetUTCDate(date) { | 862 function DateSetUTCDate(date) { |
| 844 var t = GetTimeFrom(this); | 863 var t = GetTimeFrom(this); |
| 845 date = ToNumber(date); | 864 date = ToNumber(date); |
| 846 var day = MakeDay(YearFromTime(t), MonthFromTime(t), date); | 865 var day = MakeDay(YearFromTime(t), MonthFromTime(t), date); |
| 847 return %_SetValueOf(this, TimeClip(MakeDate(day, TimeWithinDay(t)))); | 866 return %_SetValueOf(this, TimeClip(MakeDate(day, TimeWithinDay(t)))); |
| 848 }; | 867 } |
| 849 | 868 |
| 850 | 869 |
| 851 // ECMA 262 - 15.9.5.38 | 870 // ECMA 262 - 15.9.5.38 |
| 852 function DateSetMonth(month, date) { | 871 function DateSetMonth(month, date) { |
| 853 var t = LocalTime(GetTimeFrom(this)); | 872 var t = LocalTime(GetTimeFrom(this)); |
| 854 month = ToNumber(month); | 873 month = ToNumber(month); |
| 855 date = %_ArgumentsLength() < 2 ? GetDateFrom(this) : ToNumber(date); | 874 date = %_ArgumentsLength() < 2 ? GetDateFrom(this) : ToNumber(date); |
| 856 var day = MakeDay(YearFromTime(t), month, date); | 875 var day = MakeDay(YearFromTime(t), month, date); |
| 857 return %_SetValueOf(this, TimeClip(UTC(MakeDate(day, TimeWithinDay(t))))); | 876 return %_SetValueOf(this, TimeClip(UTC(MakeDate(day, TimeWithinDay(t))))); |
| 858 }; | 877 } |
| 859 | 878 |
| 860 | 879 |
| 861 // ECMA 262 - 15.9.5.39 | 880 // ECMA 262 - 15.9.5.39 |
| 862 function DateSetUTCMonth(month, date) { | 881 function DateSetUTCMonth(month, date) { |
| 863 var t = GetTimeFrom(this); | 882 var t = GetTimeFrom(this); |
| 864 month = ToNumber(month); | 883 month = ToNumber(month); |
| 865 date = %_ArgumentsLength() < 2 ? GetUTCDateFrom(this) : ToNumber(date); | 884 date = %_ArgumentsLength() < 2 ? GetUTCDateFrom(this) : ToNumber(date); |
| 866 var day = MakeDay(YearFromTime(t), month, date); | 885 var day = MakeDay(YearFromTime(t), month, date); |
| 867 return %_SetValueOf(this, TimeClip(MakeDate(day, TimeWithinDay(t)))); | 886 return %_SetValueOf(this, TimeClip(MakeDate(day, TimeWithinDay(t)))); |
| 868 }; | 887 } |
| 869 | 888 |
| 870 | 889 |
| 871 // ECMA 262 - 15.9.5.40 | 890 // ECMA 262 - 15.9.5.40 |
| 872 function DateSetFullYear(year, month, date) { | 891 function DateSetFullYear(year, month, date) { |
| 873 var t = GetTimeFrom(this); | 892 var t = GetTimeFrom(this); |
| 874 t = $isNaN(t) ? 0 : LocalTime(t); | 893 t = $isNaN(t) ? 0 : LocalTime(t); |
| 875 year = ToNumber(year); | 894 year = ToNumber(year); |
| 876 var argc = %_ArgumentsLength(); | 895 var argc = %_ArgumentsLength(); |
| 877 month = argc < 2 ? MonthFromTime(t) : ToNumber(month); | 896 month = argc < 2 ? MonthFromTime(t) : ToNumber(month); |
| 878 date = argc < 3 ? DateFromTime(t) : ToNumber(date); | 897 date = argc < 3 ? DateFromTime(t) : ToNumber(date); |
| 879 var day = MakeDay(year, month, date); | 898 var day = MakeDay(year, month, date); |
| 880 return %_SetValueOf(this, TimeClip(UTC(MakeDate(day, TimeWithinDay(t))))); | 899 return %_SetValueOf(this, TimeClip(UTC(MakeDate(day, TimeWithinDay(t))))); |
| 881 }; | 900 } |
| 882 | 901 |
| 883 | 902 |
| 884 // ECMA 262 - 15.9.5.41 | 903 // ECMA 262 - 15.9.5.41 |
| 885 function DateSetUTCFullYear(year, month, date) { | 904 function DateSetUTCFullYear(year, month, date) { |
| 886 var t = GetTimeFrom(this); | 905 var t = GetTimeFrom(this); |
| 887 if ($isNaN(t)) t = 0; | 906 if ($isNaN(t)) t = 0; |
| 888 var argc = %_ArgumentsLength(); | 907 var argc = %_ArgumentsLength(); |
| 889 year = ToNumber(year); | 908 year = ToNumber(year); |
| 890 month = argc < 2 ? MonthFromTime(t) : ToNumber(month); | 909 month = argc < 2 ? MonthFromTime(t) : ToNumber(month); |
| 891 date = argc < 3 ? DateFromTime(t) : ToNumber(date); | 910 date = argc < 3 ? DateFromTime(t) : ToNumber(date); |
| 892 var day = MakeDay(year, month, date); | 911 var day = MakeDay(year, month, date); |
| 893 return %_SetValueOf(this, TimeClip(MakeDate(day, TimeWithinDay(t)))); | 912 return %_SetValueOf(this, TimeClip(MakeDate(day, TimeWithinDay(t)))); |
| 894 }; | 913 } |
| 895 | 914 |
| 896 | 915 |
| 897 // ECMA 262 - 15.9.5.42 | 916 // ECMA 262 - 15.9.5.42 |
| 898 function DateToUTCString() { | 917 function DateToUTCString() { |
| 899 var t = GetTimeFrom(this); | 918 var t = GetTimeFrom(this); |
| 900 if ($isNaN(t)) return kInvalidDate; | 919 if ($isNaN(t)) return kInvalidDate; |
| 901 // Return UTC string of the form: Sat, 31 Jan 1970 23:00:00 GMT | 920 // Return UTC string of the form: Sat, 31 Jan 1970 23:00:00 GMT |
| 902 return WeekDays[WeekDay(t)] + ', ' | 921 return WeekDays[WeekDay(t)] + ', ' |
| 903 + TwoDigitString(DateFromTime(t)) + ' ' | 922 + TwoDigitString(DateFromTime(t)) + ' ' |
| 904 + Months[MonthFromTime(t)] + ' ' | 923 + Months[MonthFromTime(t)] + ' ' |
| 905 + YearFromTime(t) + ' ' | 924 + YearFromTime(t) + ' ' |
| 906 + TimeString(t) + ' GMT'; | 925 + TimeString(t) + ' GMT'; |
| 907 }; | 926 } |
| 908 | 927 |
| 909 | 928 |
| 910 // ECMA 262 - B.2.4 | 929 // ECMA 262 - B.2.4 |
| 911 function DateGetYear() { | 930 function DateGetYear() { |
| 912 var t = GetTimeFrom(this); | 931 var t = GetTimeFrom(this); |
| 913 if ($isNaN(t)) return $NaN; | 932 if ($isNaN(t)) return $NaN; |
| 914 return YearFromTime(LocalTime(t)) - 1900; | 933 return YearFromTime(LocalTime(t)) - 1900; |
| 915 }; | 934 } |
| 916 | 935 |
| 917 | 936 |
| 918 // ECMA 262 - B.2.5 | 937 // ECMA 262 - B.2.5 |
| 919 function DateSetYear(year) { | 938 function DateSetYear(year) { |
| 920 var t = LocalTime(GetTimeFrom(this)); | 939 var t = LocalTime(GetTimeFrom(this)); |
| 921 if ($isNaN(t)) t = 0; | 940 if ($isNaN(t)) t = 0; |
| 922 year = ToNumber(year); | 941 year = ToNumber(year); |
| 923 if ($isNaN(year)) return %_SetValueOf(this, $NaN); | 942 if ($isNaN(year)) return %_SetValueOf(this, $NaN); |
| 924 year = (0 <= TO_INTEGER(year) && TO_INTEGER(year) <= 99) | 943 year = (0 <= TO_INTEGER(year) && TO_INTEGER(year) <= 99) |
| 925 ? 1900 + TO_INTEGER(year) : year; | 944 ? 1900 + TO_INTEGER(year) : year; |
| 926 var day = MakeDay(year, GetMonthFrom(this), GetDateFrom(this)); | 945 var day = MakeDay(year, GetMonthFrom(this), GetDateFrom(this)); |
| 927 return %_SetValueOf(this, TimeClip(UTC(MakeDate(day, TimeWithinDay(t))))); | 946 return %_SetValueOf(this, TimeClip(UTC(MakeDate(day, TimeWithinDay(t))))); |
| 928 }; | 947 } |
| 948 |
| 949 |
| 950 // ECMA 262 - B.2.6 |
| 951 // |
| 952 // Notice that this does not follow ECMA 262 completely. ECMA 262 |
| 953 // says that toGMTString should be the same Function object as |
| 954 // toUTCString. JSC does not do this, so for compatibility we do not |
| 955 // do that either. Instead, we create a new function whose name |
| 956 // property will return toGMTString. |
| 957 function DateToGMTString() { |
| 958 return DateToUTCString.call(this); |
| 959 } |
| 929 | 960 |
| 930 | 961 |
| 931 // ------------------------------------------------------------------- | 962 // ------------------------------------------------------------------- |
| 932 | 963 |
| 933 function SetupDate() { | 964 function SetupDate() { |
| 934 // Setup non-enumerable properties of the Date object itself. | 965 // Setup non-enumerable properties of the Date object itself. |
| 935 InstallProperties($Date, DONT_ENUM, { | 966 InstallFunctions($Date, DONT_ENUM, $Array( |
| 936 UTC: DateUTC, | 967 "UTC", DateUTC, |
| 937 parse: DateParse, | 968 "parse", DateParse, |
| 938 now: DateNow | 969 "now", DateNow |
| 939 }); | 970 )); |
| 940 | 971 |
| 941 // Setup non-enumerable properties of the Date prototype object. | 972 // Setup non-enumerable constructor property of the Date prototype object. |
| 942 InstallProperties($Date.prototype, DONT_ENUM, { | 973 %AddProperty($Date.prototype, "constructor", $Date, DONT_ENUM); |
| 943 constructor: $Date, | 974 |
| 944 toString: DateToString, | 975 // Setup non-enumerable functions of the Date prototype object and |
| 945 toDateString: DateToDateString, | 976 // set their names. |
| 946 toTimeString: DateToTimeString, | 977 InstallFunctions($Date.prototype, DONT_ENUM, $Array( |
| 947 toLocaleString: DateToString, | 978 "toString", DateToString, |
| 948 toLocaleDateString: DateToDateString, | 979 "toDateString", DateToDateString, |
| 949 toLocaleTimeString: DateToLocaleTimeString, | 980 "toTimeString", DateToTimeString, |
| 950 valueOf: DateGetTime, | 981 "toLocaleString", DateToLocaleString, |
| 951 getTime: DateGetTime, | 982 "toLocaleDateString", DateToLocaleDateString, |
| 952 getFullYear: DateGetFullYear, | 983 "toLocaleTimeString", DateToLocaleTimeString, |
| 953 getUTCFullYear: DateGetUTCFullYear, | 984 "valueOf", DateValueOf, |
| 954 getMonth: DateGetMonth, | 985 "getTime", DateGetTime, |
| 955 getUTCMonth: DateGetUTCMonth, | 986 "getFullYear", DateGetFullYear, |
| 956 getDate: DateGetDate, | 987 "getUTCFullYear", DateGetUTCFullYear, |
| 957 getUTCDate: DateGetUTCDate, | 988 "getMonth", DateGetMonth, |
| 958 getDay: DateGetDay, | 989 "getUTCMonth", DateGetUTCMonth, |
| 959 getUTCDay: DateGetUTCDay, | 990 "getDate", DateGetDate, |
| 960 getHours: DateGetHours, | 991 "getUTCDate", DateGetUTCDate, |
| 961 getUTCHours: DateGetUTCHours, | 992 "getDay", DateGetDay, |
| 962 getMinutes: DateGetMinutes, | 993 "getUTCDay", DateGetUTCDay, |
| 963 getUTCMinutes: DateGetUTCMinutes, | 994 "getHours", DateGetHours, |
| 964 getSeconds: DateGetSeconds, | 995 "getUTCHours", DateGetUTCHours, |
| 965 getUTCSeconds: DateGetUTCSeconds, | 996 "getMinutes", DateGetMinutes, |
| 966 getMilliseconds: DateGetMilliseconds, | 997 "getUTCMinutes", DateGetUTCMinutes, |
| 967 getUTCMilliseconds: DateGetUTCMilliseconds, | 998 "getSeconds", DateGetSeconds, |
| 968 getTimezoneOffset: DateGetTimezoneOffset, | 999 "getUTCSeconds", DateGetUTCSeconds, |
| 969 setTime: DateSetTime, | 1000 "getMilliseconds", DateGetMilliseconds, |
| 970 setMilliseconds: DateSetMilliseconds, | 1001 "getUTCMilliseconds", DateGetUTCMilliseconds, |
| 971 setUTCMilliseconds: DateSetUTCMilliseconds, | 1002 "getTimezoneOffset", DateGetTimezoneOffset, |
| 972 setSeconds: DateSetSeconds, | 1003 "setTime", DateSetTime, |
| 973 setUTCSeconds: DateSetUTCSeconds, | 1004 "setMilliseconds", DateSetMilliseconds, |
| 974 setMinutes: DateSetMinutes, | 1005 "setUTCMilliseconds", DateSetUTCMilliseconds, |
| 975 setUTCMinutes: DateSetUTCMinutes, | 1006 "setSeconds", DateSetSeconds, |
| 976 setHours: DateSetHours, | 1007 "setUTCSeconds", DateSetUTCSeconds, |
| 977 setUTCHours: DateSetUTCHours, | 1008 "setMinutes", DateSetMinutes, |
| 978 setDate: DateSetDate, | 1009 "setUTCMinutes", DateSetUTCMinutes, |
| 979 setUTCDate: DateSetUTCDate, | 1010 "setHours", DateSetHours, |
| 980 setMonth: DateSetMonth, | 1011 "setUTCHours", DateSetUTCHours, |
| 981 setUTCMonth: DateSetUTCMonth, | 1012 "setDate", DateSetDate, |
| 982 setFullYear: DateSetFullYear, | 1013 "setUTCDate", DateSetUTCDate, |
| 983 setUTCFullYear: DateSetUTCFullYear, | 1014 "setMonth", DateSetMonth, |
| 984 toUTCString: DateToUTCString, | 1015 "setUTCMonth", DateSetUTCMonth, |
| 985 toGMTString: DateToUTCString, | 1016 "setFullYear", DateSetFullYear, |
| 986 getYear: DateGetYear, | 1017 "setUTCFullYear", DateSetUTCFullYear, |
| 987 setYear: DateSetYear | 1018 "toGMTString", DateToGMTString, |
| 988 }); | 1019 "toUTCString", DateToUTCString, |
| 989 }; | 1020 "getYear", DateGetYear, |
| 1021 "setYear", DateSetYear |
| 1022 )); |
| 1023 } |
| 990 | 1024 |
| 991 SetupDate(); | 1025 SetupDate(); |
| OLD | NEW |