| 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 27 matching lines...) Expand all Loading... |
| 38 // Keep reference to original values of some global properties. This | 38 // Keep reference to original values of some global properties. This |
| 39 // has the added benefit that the code in this file is isolated from | 39 // has the added benefit that the code in this file is isolated from |
| 40 // changes to these properties. | 40 // changes to these properties. |
| 41 const $Date = global.Date; | 41 const $Date = global.Date; |
| 42 | 42 |
| 43 // Helper function to throw error. | 43 // Helper function to throw error. |
| 44 function ThrowDateTypeError() { | 44 function ThrowDateTypeError() { |
| 45 throw new $TypeError('this is not a Date object.'); | 45 throw new $TypeError('this is not a Date object.'); |
| 46 } | 46 } |
| 47 | 47 |
| 48 // ECMA 262 - 15.9.1.2 | |
| 49 function Day(time) { | |
| 50 return FLOOR(time / msPerDay); | |
| 51 } | |
| 52 | |
| 53 | |
| 54 // ECMA 262 - 5.2 | 48 // ECMA 262 - 5.2 |
| 55 function Modulo(value, remainder) { | 49 function Modulo(value, remainder) { |
| 56 var mod = value % remainder; | 50 var mod = value % remainder; |
| 57 // Guard against returning -0. | 51 // Guard against returning -0. |
| 58 if (mod == 0) return 0; | 52 if (mod == 0) return 0; |
| 59 return mod >= 0 ? mod : mod + remainder; | 53 return mod >= 0 ? mod : mod + remainder; |
| 60 } | 54 } |
| 61 | 55 |
| 62 | 56 |
| 63 function TimeWithinDay(time) { | 57 function TimeWithinDay(time) { |
| (...skipping 15 matching lines...) Expand all Loading... |
| 79 - FLOOR((year-1901)/100) | 73 - FLOOR((year-1901)/100) |
| 80 + FLOOR((year-1601)/400); | 74 + FLOOR((year-1601)/400); |
| 81 } | 75 } |
| 82 | 76 |
| 83 | 77 |
| 84 function TimeFromYear(year) { | 78 function TimeFromYear(year) { |
| 85 return msPerDay * DayFromYear(year); | 79 return msPerDay * DayFromYear(year); |
| 86 } | 80 } |
| 87 | 81 |
| 88 | 82 |
| 89 function YearFromTime(time) { | |
| 90 return FromJulianDay(Day(time) + kDayZeroInJulianDay).year; | |
| 91 } | |
| 92 | |
| 93 | |
| 94 function InLeapYear(time) { | 83 function InLeapYear(time) { |
| 95 return DaysInYear(YearFromTime(time)) == 366 ? 1 : 0; | 84 return DaysInYear(YEAR_FROM_TIME(time)) == 366 ? 1 : 0; |
| 96 } | |
| 97 | |
| 98 | |
| 99 // ECMA 262 - 15.9.1.4 | |
| 100 function MonthFromTime(time) { | |
| 101 return FromJulianDay(Day(time) + kDayZeroInJulianDay).month; | |
| 102 } | 85 } |
| 103 | 86 |
| 104 | 87 |
| 105 function DayWithinYear(time) { | 88 function DayWithinYear(time) { |
| 106 return Day(time) - DayFromYear(YearFromTime(time)); | 89 return DAY(time) - DayFromYear(YEAR_FROM_TIME(time)); |
| 107 } | |
| 108 | |
| 109 | |
| 110 // ECMA 262 - 15.9.1.5 | |
| 111 function DateFromTime(time) { | |
| 112 return FromJulianDay(Day(time) + kDayZeroInJulianDay).date; | |
| 113 } | 90 } |
| 114 | 91 |
| 115 | 92 |
| 116 // ECMA 262 - 15.9.1.9 | 93 // ECMA 262 - 15.9.1.9 |
| 117 function EquivalentYear(year) { | 94 function EquivalentYear(year) { |
| 118 // Returns an equivalent year in the range [2008-2035] matching | 95 // Returns an equivalent year in the range [2008-2035] matching |
| 119 // - leap year. | 96 // - leap year. |
| 120 // - week day of first day. | 97 // - week day of first day. |
| 121 var time = TimeFromYear(year); | 98 var time = TimeFromYear(year); |
| 122 var recent_year = (InLeapYear(time) == 0 ? 1967 : 1956) + | 99 var recent_year = (InLeapYear(time) == 0 ? 1967 : 1956) + |
| 123 (WeekDay(time) * 12) % 28; | 100 (WeekDay(time) * 12) % 28; |
| 124 // Find the year in the range 2008..2037 that is equivalent mod 28. | 101 // Find the year in the range 2008..2037 that is equivalent mod 28. |
| 125 // Add 3*28 to give a positive argument to the modulus operator. | 102 // Add 3*28 to give a positive argument to the modulus operator. |
| 126 return 2008 + (recent_year + 3*28 - 2008) % 28; | 103 return 2008 + (recent_year + 3*28 - 2008) % 28; |
| 127 } | 104 } |
| 128 | 105 |
| 129 | 106 |
| 130 function EquivalentTime(t) { | 107 function EquivalentTime(t) { |
| 131 // The issue here is that some library calls don't work right for dates | 108 // The issue here is that some library calls don't work right for dates |
| 132 // that cannot be represented using a non-negative signed 32 bit integer | 109 // that cannot be represented using a non-negative signed 32 bit integer |
| 133 // (measured in whole seconds based on the 1970 epoch). | 110 // (measured in whole seconds based on the 1970 epoch). |
| 134 // We solve this by mapping the time to a year with same leap-year-ness | 111 // We solve this by mapping the time to a year with same leap-year-ness |
| 135 // and same starting day for the year. The ECMAscript specification says | 112 // and same starting day for the year. The ECMAscript specification says |
| 136 // we must do this, but for compatibility with other browsers, we use | 113 // we must do this, but for compatibility with other browsers, we use |
| 137 // the actual year if it is in the range 1970..2037 | 114 // the actual year if it is in the range 1970..2037 |
| 138 if (t >= 0 && t <= 2.1e12) return t; | 115 if (t >= 0 && t <= 2.1e12) return t; |
| 139 var day = MakeDay(EquivalentYear(YearFromTime(t)), MonthFromTime(t), DateFromT
ime(t)); | 116 var day = MakeDay(EquivalentYear(YEAR_FROM_TIME(t)), MONTH_FROM_TIME(t), DATE_
FROM_TIME(t)); |
| 140 return TimeClip(MakeDate(day, TimeWithinDay(t))); | 117 return TimeClip(MakeDate(day, TimeWithinDay(t))); |
| 141 } | 118 } |
| 142 | 119 |
| 143 | 120 |
| 144 // Because computing the DST offset is a pretty expensive operation | 121 // Because computing the DST offset is a pretty expensive operation |
| 145 // we keep a cache of last computed offset along with a time interval | 122 // we keep a cache of last computed offset along with a time interval |
| 146 // where we know the cache is valid. | 123 // where we know the cache is valid. |
| 147 var DST_offset_cache = { | 124 var DST_offset_cache = { |
| 148 // Cached DST offset. | 125 // Cached DST offset. |
| 149 offset: 0, | 126 offset: 0, |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 225 return timezone_cache_timezone; | 202 return timezone_cache_timezone; |
| 226 } | 203 } |
| 227 var timezone = %DateLocalTimezone(EquivalentTime(t)); | 204 var timezone = %DateLocalTimezone(EquivalentTime(t)); |
| 228 timezone_cache_time = t; | 205 timezone_cache_time = t; |
| 229 timezone_cache_timezone = timezone; | 206 timezone_cache_timezone = timezone; |
| 230 return timezone; | 207 return timezone; |
| 231 } | 208 } |
| 232 | 209 |
| 233 | 210 |
| 234 function WeekDay(time) { | 211 function WeekDay(time) { |
| 235 return Modulo(Day(time) + 4, 7); | 212 return Modulo(DAY(time) + 4, 7); |
| 236 } | 213 } |
| 237 | 214 |
| 238 var local_time_offset = %DateLocalTimeOffset(); | 215 var local_time_offset = %DateLocalTimeOffset(); |
| 239 | 216 |
| 240 function LocalTime(time) { | 217 function LocalTime(time) { |
| 241 if (NUMBER_IS_NAN(time)) return time; | 218 if (NUMBER_IS_NAN(time)) return time; |
| 242 return time + local_time_offset + DaylightSavingsOffset(time); | 219 return time + local_time_offset + DaylightSavingsOffset(time); |
| 243 } | 220 } |
| 244 | 221 |
| 245 function LocalTimeNoCheck(time) { | 222 function LocalTimeNoCheck(time) { |
| 246 return time + local_time_offset + DaylightSavingsOffset(time); | 223 // Inline the DST offset cache checks for speed. |
| 224 var cache = DST_offset_cache; |
| 225 if (cache.start <= time && time <= cache.end) { |
| 226 var dst_offset = cache.offset; |
| 227 } else { |
| 228 var dst_offset = DaylightSavingsOffset(time); |
| 229 } |
| 230 return time + local_time_offset + dst_offset; |
| 247 } | 231 } |
| 248 | 232 |
| 249 | 233 |
| 250 function UTC(time) { | 234 function UTC(time) { |
| 251 if (NUMBER_IS_NAN(time)) return time; | 235 if (NUMBER_IS_NAN(time)) return time; |
| 252 var tmp = time - local_time_offset; | 236 var tmp = time - local_time_offset; |
| 253 return tmp - DaylightSavingsOffset(tmp); | 237 return tmp - DaylightSavingsOffset(tmp); |
| 254 } | 238 } |
| 255 | 239 |
| 256 | 240 |
| 257 // ECMA 262 - 15.9.1.10 | |
| 258 function HourFromTime(time) { | |
| 259 return Modulo(FLOOR(time / msPerHour), HoursPerDay); | |
| 260 } | |
| 261 | |
| 262 | |
| 263 function MinFromTime(time) { | |
| 264 return Modulo(FLOOR(time / msPerMinute), MinutesPerHour); | |
| 265 } | |
| 266 | |
| 267 | |
| 268 function SecFromTime(time) { | |
| 269 return Modulo(FLOOR(time / msPerSecond), SecondsPerMinute); | |
| 270 } | |
| 271 | |
| 272 | |
| 273 function msFromTime(time) { | |
| 274 return Modulo(time, msPerSecond); | |
| 275 } | |
| 276 | |
| 277 | |
| 278 // ECMA 262 - 15.9.1.11 | 241 // ECMA 262 - 15.9.1.11 |
| 279 function MakeTime(hour, min, sec, ms) { | 242 function MakeTime(hour, min, sec, ms) { |
| 280 if (!$isFinite(hour)) return $NaN; | 243 if (!$isFinite(hour)) return $NaN; |
| 281 if (!$isFinite(min)) return $NaN; | 244 if (!$isFinite(min)) return $NaN; |
| 282 if (!$isFinite(sec)) return $NaN; | 245 if (!$isFinite(sec)) return $NaN; |
| 283 if (!$isFinite(ms)) return $NaN; | 246 if (!$isFinite(ms)) return $NaN; |
| 284 return TO_INTEGER(hour) * msPerHour | 247 return TO_INTEGER(hour) * msPerHour |
| 285 + TO_INTEGER(min) * msPerMinute | 248 + TO_INTEGER(min) * msPerMinute |
| 286 + TO_INTEGER(sec) * msPerSecond | 249 + TO_INTEGER(sec) * msPerSecond |
| 287 + TO_INTEGER(ms); | 250 + TO_INTEGER(ms); |
| (...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 461 } else if (IS_STRING(year)) { | 424 } else if (IS_STRING(year)) { |
| 462 // Probe the Date cache. If we already have a time value for the | 425 // Probe the Date cache. If we already have a time value for the |
| 463 // given time, we re-use that instead of parsing the string again. | 426 // given time, we re-use that instead of parsing the string again. |
| 464 var cache = Date_cache; | 427 var cache = Date_cache; |
| 465 if (cache.string === year) { | 428 if (cache.string === year) { |
| 466 value = cache.time; | 429 value = cache.time; |
| 467 } else { | 430 } else { |
| 468 value = DateParse(year); | 431 value = DateParse(year); |
| 469 if (!NUMBER_IS_NAN(value)) { | 432 if (!NUMBER_IS_NAN(value)) { |
| 470 cache.time = value; | 433 cache.time = value; |
| 471 cache.year = YearFromTime(LocalTimeNoCheck(value)); | 434 cache.year = YEAR_FROM_TIME(LocalTimeNoCheck(value)); |
| 472 cache.string = year; | 435 cache.string = year; |
| 473 } | 436 } |
| 474 } | 437 } |
| 475 | 438 |
| 476 } else { | 439 } else { |
| 477 // According to ECMA 262, no hint should be given for this | 440 // According to ECMA 262, no hint should be given for this |
| 478 // conversion. However, ToPrimitive defaults to STRING_HINT for | 441 // conversion. However, ToPrimitive defaults to STRING_HINT for |
| 479 // Date objects which will lose precision when the Date | 442 // Date objects which will lose precision when the Date |
| 480 // constructor is called with another Date object as its | 443 // constructor is called with another Date object as its |
| 481 // argument. We therefore use NUMBER_HINT for the conversion, | 444 // argument. We therefore use NUMBER_HINT for the conversion, |
| (...skipping 19 matching lines...) Expand all Loading... |
| 501 } | 464 } |
| 502 %_SetValueOf(this, value); | 465 %_SetValueOf(this, value); |
| 503 }); | 466 }); |
| 504 | 467 |
| 505 | 468 |
| 506 // Helper functions. | 469 // Helper functions. |
| 507 function GetTimeFrom(aDate) { | 470 function GetTimeFrom(aDate) { |
| 508 return DATE_VALUE(aDate); | 471 return DATE_VALUE(aDate); |
| 509 } | 472 } |
| 510 | 473 |
| 511 | |
| 512 function GetMillisecondsFrom(aDate) { | 474 function GetMillisecondsFrom(aDate) { |
| 513 var t = DATE_VALUE(aDate); | 475 var t = DATE_VALUE(aDate); |
| 514 if (NUMBER_IS_NAN(t)) return t; | 476 if (NUMBER_IS_NAN(t)) return t; |
| 515 return msFromTime(LocalTimeNoCheck(t)); | 477 return MS_FROM_TIME(LocalTimeNoCheck(t)); |
| 516 } | 478 } |
| 517 | 479 |
| 518 | 480 |
| 519 function GetUTCMillisecondsFrom(aDate) { | 481 function GetUTCMillisecondsFrom(aDate) { |
| 520 var t = DATE_VALUE(aDate); | 482 var t = DATE_VALUE(aDate); |
| 521 if (NUMBER_IS_NAN(t)) return t; | 483 if (NUMBER_IS_NAN(t)) return t; |
| 522 return msFromTime(t); | 484 return MS_FROM_TIME(t); |
| 523 } | 485 } |
| 524 | 486 |
| 525 | 487 |
| 526 function GetSecondsFrom(aDate) { | 488 function GetSecondsFrom(aDate) { |
| 527 var t = DATE_VALUE(aDate); | 489 var t = DATE_VALUE(aDate); |
| 528 if (NUMBER_IS_NAN(t)) return t; | 490 if (NUMBER_IS_NAN(t)) return t; |
| 529 return SecFromTime(LocalTimeNoCheck(t)); | 491 return SEC_FROM_TIME(LocalTimeNoCheck(t)); |
| 530 } | 492 } |
| 531 | 493 |
| 532 | 494 |
| 533 function GetUTCSecondsFrom(aDate) { | 495 function GetUTCSecondsFrom(aDate) { |
| 534 var t = DATE_VALUE(aDate); | 496 var t = DATE_VALUE(aDate); |
| 535 if (NUMBER_IS_NAN(t)) return t; | 497 if (NUMBER_IS_NAN(t)) return t; |
| 536 return SecFromTime(t); | 498 return SEC_FROM_TIME(t); |
| 537 } | 499 } |
| 538 | 500 |
| 539 | 501 |
| 540 function GetMinutesFrom(aDate) { | 502 function GetMinutesFrom(aDate) { |
| 541 var t = DATE_VALUE(aDate); | 503 var t = DATE_VALUE(aDate); |
| 542 if (NUMBER_IS_NAN(t)) return t; | 504 if (NUMBER_IS_NAN(t)) return t; |
| 543 return MinFromTime(LocalTimeNoCheck(t)); | 505 return MIN_FROM_TIME(LocalTimeNoCheck(t)); |
| 544 } | 506 } |
| 545 | 507 |
| 546 | 508 |
| 547 function GetUTCMinutesFrom(aDate) { | 509 function GetUTCMinutesFrom(aDate) { |
| 548 var t = DATE_VALUE(aDate); | 510 var t = DATE_VALUE(aDate); |
| 549 if (NUMBER_IS_NAN(t)) return t; | 511 if (NUMBER_IS_NAN(t)) return t; |
| 550 return MinFromTime(t); | 512 return MIN_FROM_TIME(t); |
| 551 } | 513 } |
| 552 | 514 |
| 553 | 515 |
| 554 function GetHoursFrom(aDate) { | 516 function GetHoursFrom(aDate) { |
| 555 var t = DATE_VALUE(aDate); | 517 var t = DATE_VALUE(aDate); |
| 556 if (NUMBER_IS_NAN(t)) return t; | 518 if (NUMBER_IS_NAN(t)) return t; |
| 557 return HourFromTime(LocalTimeNoCheck(t)); | 519 return HOUR_FROM_TIME(LocalTimeNoCheck(t)); |
| 558 } | 520 } |
| 559 | 521 |
| 560 | 522 |
| 561 function GetUTCHoursFrom(aDate) { | 523 function GetUTCHoursFrom(aDate) { |
| 562 var t = DATE_VALUE(aDate); | 524 var t = DATE_VALUE(aDate); |
| 563 if (NUMBER_IS_NAN(t)) return t; | 525 if (NUMBER_IS_NAN(t)) return t; |
| 564 return HourFromTime(t); | 526 return HOUR_FROM_TIME(t); |
| 565 } | 527 } |
| 566 | 528 |
| 567 | 529 |
| 568 function GetFullYearFrom(aDate) { | 530 function GetFullYearFrom(aDate) { |
| 569 var t = DATE_VALUE(aDate); | 531 var t = DATE_VALUE(aDate); |
| 570 if (NUMBER_IS_NAN(t)) return t; | 532 if (NUMBER_IS_NAN(t)) return t; |
| 571 var cache = Date_cache; | 533 var cache = Date_cache; |
| 572 if (cache.time === t) return cache.year; | 534 if (cache.time === t) return cache.year; |
| 573 return YearFromTime(LocalTimeNoCheck(t)); | 535 return YEAR_FROM_TIME(LocalTimeNoCheck(t)); |
| 574 } | 536 } |
| 575 | 537 |
| 576 | 538 |
| 577 function GetUTCFullYearFrom(aDate) { | 539 function GetUTCFullYearFrom(aDate) { |
| 578 var t = DATE_VALUE(aDate); | 540 var t = DATE_VALUE(aDate); |
| 579 if (NUMBER_IS_NAN(t)) return t; | 541 if (NUMBER_IS_NAN(t)) return t; |
| 580 return YearFromTime(t); | 542 return YEAR_FROM_TIME(t); |
| 581 } | 543 } |
| 582 | 544 |
| 583 | 545 |
| 584 function GetMonthFrom(aDate) { | 546 function GetMonthFrom(aDate) { |
| 585 var t = DATE_VALUE(aDate); | 547 var t = DATE_VALUE(aDate); |
| 586 if (NUMBER_IS_NAN(t)) return t; | 548 if (NUMBER_IS_NAN(t)) return t; |
| 587 return MonthFromTime(LocalTimeNoCheck(t)); | 549 return MONTH_FROM_TIME(LocalTimeNoCheck(t)); |
| 588 } | 550 } |
| 589 | 551 |
| 590 | 552 |
| 591 function GetUTCMonthFrom(aDate) { | 553 function GetUTCMonthFrom(aDate) { |
| 592 var t = DATE_VALUE(aDate); | 554 var t = DATE_VALUE(aDate); |
| 593 if (NUMBER_IS_NAN(t)) return t; | 555 if (NUMBER_IS_NAN(t)) return t; |
| 594 return MonthFromTime(t); | 556 return MONTH_FROM_TIME(t); |
| 595 } | 557 } |
| 596 | 558 |
| 597 | 559 |
| 598 function GetDateFrom(aDate) { | 560 function GetDateFrom(aDate) { |
| 599 var t = DATE_VALUE(aDate); | 561 var t = DATE_VALUE(aDate); |
| 600 if (NUMBER_IS_NAN(t)) return t; | 562 if (NUMBER_IS_NAN(t)) return t; |
| 601 return DateFromTime(LocalTimeNoCheck(t)); | 563 return DATE_FROM_TIME(LocalTimeNoCheck(t)); |
| 602 } | 564 } |
| 603 | 565 |
| 604 | 566 |
| 605 function GetUTCDateFrom(aDate) { | 567 function GetUTCDateFrom(aDate) { |
| 606 var t = DATE_VALUE(aDate); | 568 var t = DATE_VALUE(aDate); |
| 607 if (NUMBER_IS_NAN(t)) return t; | 569 if (NUMBER_IS_NAN(t)) return t; |
| 608 return DateFromTime(t); | 570 return DATE_FROM_TIME(t); |
| 609 } | 571 } |
| 610 | 572 |
| 611 | 573 |
| 612 %FunctionSetPrototype($Date, new $Date($NaN)); | 574 %FunctionSetPrototype($Date, new $Date($NaN)); |
| 613 | 575 |
| 614 | 576 |
| 615 var WeekDays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']; | 577 var WeekDays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']; |
| 616 var Months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oc
t', 'Nov', 'Dec']; | 578 var Months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oc
t', 'Nov', 'Dec']; |
| 617 | 579 |
| 618 | 580 |
| 619 function TwoDigitString(value) { | 581 function TwoDigitString(value) { |
| 620 return value < 10 ? "0" + value : "" + value; | 582 return value < 10 ? "0" + value : "" + value; |
| 621 } | 583 } |
| 622 | 584 |
| 623 | 585 |
| 624 function DateString(time) { | 586 function DateString(time) { |
| 625 var YMD = FromJulianDay(Day(time) + kDayZeroInJulianDay); | 587 var YMD = FromJulianDay(DAY(time) + kDayZeroInJulianDay); |
| 626 return WeekDays[WeekDay(time)] + ' ' | 588 return WeekDays[WeekDay(time)] + ' ' |
| 627 + Months[YMD.month] + ' ' | 589 + Months[YMD.month] + ' ' |
| 628 + TwoDigitString(YMD.date) + ' ' | 590 + TwoDigitString(YMD.date) + ' ' |
| 629 + YMD.year; | 591 + YMD.year; |
| 630 } | 592 } |
| 631 | 593 |
| 632 | 594 |
| 633 var LongWeekDays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Fri
day', 'Saturday']; | 595 var LongWeekDays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Fri
day', 'Saturday']; |
| 634 var LongMonths = ['January', 'February', 'March', 'April', 'May', 'June', 'July'
, 'August', 'September', 'October', 'November', 'December']; | 596 var LongMonths = ['January', 'February', 'March', 'April', 'May', 'June', 'July'
, 'August', 'September', 'October', 'November', 'December']; |
| 635 | 597 |
| 636 | 598 |
| 637 function LongDateString(time) { | 599 function LongDateString(time) { |
| 638 var YMD = FromJulianDay(Day(time) + kDayZeroInJulianDay); | 600 var YMD = FromJulianDay(DAY(time) + kDayZeroInJulianDay); |
| 639 return LongWeekDays[WeekDay(time)] + ', ' | 601 return LongWeekDays[WeekDay(time)] + ', ' |
| 640 + LongMonths[YMD.month] + ' ' | 602 + LongMonths[YMD.month] + ' ' |
| 641 + TwoDigitString(YMD.date) + ', ' | 603 + TwoDigitString(YMD.date) + ', ' |
| 642 + YMD.year; | 604 + YMD.year; |
| 643 } | 605 } |
| 644 | 606 |
| 645 | 607 |
| 646 function TimeString(time) { | 608 function TimeString(time) { |
| 647 return TwoDigitString(HourFromTime(time)) + ':' | 609 return TwoDigitString(HOUR_FROM_TIME(time)) + ':' |
| 648 + TwoDigitString(MinFromTime(time)) + ':' | 610 + TwoDigitString(MIN_FROM_TIME(time)) + ':' |
| 649 + TwoDigitString(SecFromTime(time)); | 611 + TwoDigitString(SEC_FROM_TIME(time)); |
| 650 } | 612 } |
| 651 | 613 |
| 652 | 614 |
| 653 function LocalTimezoneString(time) { | 615 function LocalTimezoneString(time) { |
| 654 var timezoneOffset = | 616 var timezoneOffset = |
| 655 (local_time_offset + DaylightSavingsOffset(time)) / msPerMinute; | 617 (local_time_offset + DaylightSavingsOffset(time)) / msPerMinute; |
| 656 var sign = (timezoneOffset >= 0) ? 1 : -1; | 618 var sign = (timezoneOffset >= 0) ? 1 : -1; |
| 657 var hours = FLOOR((sign * timezoneOffset)/60); | 619 var hours = FLOOR((sign * timezoneOffset)/60); |
| 658 var min = FLOOR((sign * timezoneOffset)%60); | 620 var min = FLOOR((sign * timezoneOffset)%60); |
| 659 var gmt = ' GMT' + ((sign == 1) ? '+' : '-') + | 621 var gmt = ' GMT' + ((sign == 1) ? '+' : '-') + |
| (...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 885 function DateSetTime(ms) { | 847 function DateSetTime(ms) { |
| 886 if (!IS_DATE(this)) ThrowDateTypeError(); | 848 if (!IS_DATE(this)) ThrowDateTypeError(); |
| 887 return %_SetValueOf(this, TimeClip(ToNumber(ms))); | 849 return %_SetValueOf(this, TimeClip(ToNumber(ms))); |
| 888 } | 850 } |
| 889 | 851 |
| 890 | 852 |
| 891 // ECMA 262 - 15.9.5.28 | 853 // ECMA 262 - 15.9.5.28 |
| 892 function DateSetMilliseconds(ms) { | 854 function DateSetMilliseconds(ms) { |
| 893 var t = LocalTime(DATE_VALUE(this)); | 855 var t = LocalTime(DATE_VALUE(this)); |
| 894 ms = ToNumber(ms); | 856 ms = ToNumber(ms); |
| 895 var time = MakeTime(HourFromTime(t), MinFromTime(t), SecFromTime(t), ms); | 857 var time = MakeTime(HOUR_FROM_TIME(t), MIN_FROM_TIME(t), SEC_FROM_TIME(t), ms)
; |
| 896 return %_SetValueOf(this, TimeClip(UTC(MakeDate(Day(t), time)))); | 858 return %_SetValueOf(this, TimeClip(UTC(MakeDate(DAY(t), time)))); |
| 897 } | 859 } |
| 898 | 860 |
| 899 | 861 |
| 900 // ECMA 262 - 15.9.5.29 | 862 // ECMA 262 - 15.9.5.29 |
| 901 function DateSetUTCMilliseconds(ms) { | 863 function DateSetUTCMilliseconds(ms) { |
| 902 var t = DATE_VALUE(this); | 864 var t = DATE_VALUE(this); |
| 903 ms = ToNumber(ms); | 865 ms = ToNumber(ms); |
| 904 var time = MakeTime(HourFromTime(t), MinFromTime(t), SecFromTime(t), ms); | 866 var time = MakeTime(HOUR_FROM_TIME(t), MIN_FROM_TIME(t), SEC_FROM_TIME(t), ms)
; |
| 905 return %_SetValueOf(this, TimeClip(MakeDate(Day(t), time))); | 867 return %_SetValueOf(this, TimeClip(MakeDate(DAY(t), time))); |
| 906 } | 868 } |
| 907 | 869 |
| 908 | 870 |
| 909 // ECMA 262 - 15.9.5.30 | 871 // ECMA 262 - 15.9.5.30 |
| 910 function DateSetSeconds(sec, ms) { | 872 function DateSetSeconds(sec, ms) { |
| 911 var t = LocalTime(DATE_VALUE(this)); | 873 var t = LocalTime(DATE_VALUE(this)); |
| 912 sec = ToNumber(sec); | 874 sec = ToNumber(sec); |
| 913 ms = %_ArgumentsLength() < 2 ? GetMillisecondsFrom(this) : ToNumber(ms); | 875 ms = %_ArgumentsLength() < 2 ? GetMillisecondsFrom(this) : ToNumber(ms); |
| 914 var time = MakeTime(HourFromTime(t), MinFromTime(t), sec, ms); | 876 var time = MakeTime(HOUR_FROM_TIME(t), MIN_FROM_TIME(t), sec, ms); |
| 915 return %_SetValueOf(this, TimeClip(UTC(MakeDate(Day(t), time)))); | 877 return %_SetValueOf(this, TimeClip(UTC(MakeDate(DAY(t), time)))); |
| 916 } | 878 } |
| 917 | 879 |
| 918 | 880 |
| 919 // ECMA 262 - 15.9.5.31 | 881 // ECMA 262 - 15.9.5.31 |
| 920 function DateSetUTCSeconds(sec, ms) { | 882 function DateSetUTCSeconds(sec, ms) { |
| 921 var t = DATE_VALUE(this); | 883 var t = DATE_VALUE(this); |
| 922 sec = ToNumber(sec); | 884 sec = ToNumber(sec); |
| 923 ms = %_ArgumentsLength() < 2 ? GetUTCMillisecondsFrom(this) : ToNumber(ms); | 885 ms = %_ArgumentsLength() < 2 ? GetUTCMillisecondsFrom(this) : ToNumber(ms); |
| 924 var time = MakeTime(HourFromTime(t), MinFromTime(t), sec, ms); | 886 var time = MakeTime(HOUR_FROM_TIME(t), MIN_FROM_TIME(t), sec, ms); |
| 925 return %_SetValueOf(this, TimeClip(MakeDate(Day(t), time))); | 887 return %_SetValueOf(this, TimeClip(MakeDate(DAY(t), time))); |
| 926 } | 888 } |
| 927 | 889 |
| 928 | 890 |
| 929 // ECMA 262 - 15.9.5.33 | 891 // ECMA 262 - 15.9.5.33 |
| 930 function DateSetMinutes(min, sec, ms) { | 892 function DateSetMinutes(min, sec, ms) { |
| 931 var t = LocalTime(DATE_VALUE(this)); | 893 var t = LocalTime(DATE_VALUE(this)); |
| 932 min = ToNumber(min); | 894 min = ToNumber(min); |
| 933 var argc = %_ArgumentsLength(); | 895 var argc = %_ArgumentsLength(); |
| 934 sec = argc < 2 ? GetSecondsFrom(this) : ToNumber(sec); | 896 sec = argc < 2 ? GetSecondsFrom(this) : ToNumber(sec); |
| 935 ms = argc < 3 ? GetMillisecondsFrom(this) : ToNumber(ms); | 897 ms = argc < 3 ? GetMillisecondsFrom(this) : ToNumber(ms); |
| 936 var time = MakeTime(HourFromTime(t), min, sec, ms); | 898 var time = MakeTime(HOUR_FROM_TIME(t), min, sec, ms); |
| 937 return %_SetValueOf(this, TimeClip(UTC(MakeDate(Day(t), time)))); | 899 return %_SetValueOf(this, TimeClip(UTC(MakeDate(DAY(t), time)))); |
| 938 } | 900 } |
| 939 | 901 |
| 940 | 902 |
| 941 // ECMA 262 - 15.9.5.34 | 903 // ECMA 262 - 15.9.5.34 |
| 942 function DateSetUTCMinutes(min, sec, ms) { | 904 function DateSetUTCMinutes(min, sec, ms) { |
| 943 var t = DATE_VALUE(this); | 905 var t = DATE_VALUE(this); |
| 944 min = ToNumber(min); | 906 min = ToNumber(min); |
| 945 var argc = %_ArgumentsLength(); | 907 var argc = %_ArgumentsLength(); |
| 946 sec = argc < 2 ? GetUTCSecondsFrom(this) : ToNumber(sec); | 908 sec = argc < 2 ? GetUTCSecondsFrom(this) : ToNumber(sec); |
| 947 ms = argc < 3 ? GetUTCMillisecondsFrom(this) : ToNumber(ms); | 909 ms = argc < 3 ? GetUTCMillisecondsFrom(this) : ToNumber(ms); |
| 948 var time = MakeTime(HourFromTime(t), min, sec, ms); | 910 var time = MakeTime(HOUR_FROM_TIME(t), min, sec, ms); |
| 949 return %_SetValueOf(this, TimeClip(MakeDate(Day(t), time))); | 911 return %_SetValueOf(this, TimeClip(MakeDate(DAY(t), time))); |
| 950 } | 912 } |
| 951 | 913 |
| 952 | 914 |
| 953 // ECMA 262 - 15.9.5.35 | 915 // ECMA 262 - 15.9.5.35 |
| 954 function DateSetHours(hour, min, sec, ms) { | 916 function DateSetHours(hour, min, sec, ms) { |
| 955 var t = LocalTime(DATE_VALUE(this)); | 917 var t = LocalTime(DATE_VALUE(this)); |
| 956 hour = ToNumber(hour); | 918 hour = ToNumber(hour); |
| 957 var argc = %_ArgumentsLength(); | 919 var argc = %_ArgumentsLength(); |
| 958 min = argc < 2 ? GetMinutesFrom(this) : ToNumber(min); | 920 min = argc < 2 ? GetMinutesFrom(this) : ToNumber(min); |
| 959 sec = argc < 3 ? GetSecondsFrom(this) : ToNumber(sec); | 921 sec = argc < 3 ? GetSecondsFrom(this) : ToNumber(sec); |
| 960 ms = argc < 4 ? GetMillisecondsFrom(this) : ToNumber(ms); | 922 ms = argc < 4 ? GetMillisecondsFrom(this) : ToNumber(ms); |
| 961 var time = MakeTime(hour, min, sec, ms); | 923 var time = MakeTime(hour, min, sec, ms); |
| 962 return %_SetValueOf(this, TimeClip(UTC(MakeDate(Day(t), time)))); | 924 return %_SetValueOf(this, TimeClip(UTC(MakeDate(DAY(t), time)))); |
| 963 } | 925 } |
| 964 | 926 |
| 965 | 927 |
| 966 // ECMA 262 - 15.9.5.34 | 928 // ECMA 262 - 15.9.5.34 |
| 967 function DateSetUTCHours(hour, min, sec, ms) { | 929 function DateSetUTCHours(hour, min, sec, ms) { |
| 968 var t = DATE_VALUE(this); | 930 var t = DATE_VALUE(this); |
| 969 hour = ToNumber(hour); | 931 hour = ToNumber(hour); |
| 970 var argc = %_ArgumentsLength(); | 932 var argc = %_ArgumentsLength(); |
| 971 min = argc < 2 ? GetUTCMinutesFrom(this) : ToNumber(min); | 933 min = argc < 2 ? GetUTCMinutesFrom(this) : ToNumber(min); |
| 972 sec = argc < 3 ? GetUTCSecondsFrom(this) : ToNumber(sec); | 934 sec = argc < 3 ? GetUTCSecondsFrom(this) : ToNumber(sec); |
| 973 ms = argc < 4 ? GetUTCMillisecondsFrom(this) : ToNumber(ms); | 935 ms = argc < 4 ? GetUTCMillisecondsFrom(this) : ToNumber(ms); |
| 974 var time = MakeTime(hour, min, sec, ms); | 936 var time = MakeTime(hour, min, sec, ms); |
| 975 return %_SetValueOf(this, TimeClip(MakeDate(Day(t), time))); | 937 return %_SetValueOf(this, TimeClip(MakeDate(DAY(t), time))); |
| 976 } | 938 } |
| 977 | 939 |
| 978 | 940 |
| 979 // ECMA 262 - 15.9.5.36 | 941 // ECMA 262 - 15.9.5.36 |
| 980 function DateSetDate(date) { | 942 function DateSetDate(date) { |
| 981 var t = LocalTime(DATE_VALUE(this)); | 943 var t = LocalTime(DATE_VALUE(this)); |
| 982 date = ToNumber(date); | 944 date = ToNumber(date); |
| 983 var day = MakeDay(YearFromTime(t), MonthFromTime(t), date); | 945 var day = MakeDay(YEAR_FROM_TIME(t), MONTH_FROM_TIME(t), date); |
| 984 return %_SetValueOf(this, TimeClip(UTC(MakeDate(day, TimeWithinDay(t))))); | 946 return %_SetValueOf(this, TimeClip(UTC(MakeDate(day, TimeWithinDay(t))))); |
| 985 } | 947 } |
| 986 | 948 |
| 987 | 949 |
| 988 // ECMA 262 - 15.9.5.37 | 950 // ECMA 262 - 15.9.5.37 |
| 989 function DateSetUTCDate(date) { | 951 function DateSetUTCDate(date) { |
| 990 var t = DATE_VALUE(this); | 952 var t = DATE_VALUE(this); |
| 991 date = ToNumber(date); | 953 date = ToNumber(date); |
| 992 var day = MakeDay(YearFromTime(t), MonthFromTime(t), date); | 954 var day = MakeDay(YEAR_FROM_TIME(t), MONTH_FROM_TIME(t), date); |
| 993 return %_SetValueOf(this, TimeClip(MakeDate(day, TimeWithinDay(t)))); | 955 return %_SetValueOf(this, TimeClip(MakeDate(day, TimeWithinDay(t)))); |
| 994 } | 956 } |
| 995 | 957 |
| 996 | 958 |
| 997 // ECMA 262 - 15.9.5.38 | 959 // ECMA 262 - 15.9.5.38 |
| 998 function DateSetMonth(month, date) { | 960 function DateSetMonth(month, date) { |
| 999 var t = LocalTime(DATE_VALUE(this)); | 961 var t = LocalTime(DATE_VALUE(this)); |
| 1000 month = ToNumber(month); | 962 month = ToNumber(month); |
| 1001 date = %_ArgumentsLength() < 2 ? GetDateFrom(this) : ToNumber(date); | 963 date = %_ArgumentsLength() < 2 ? GetDateFrom(this) : ToNumber(date); |
| 1002 var day = MakeDay(YearFromTime(t), month, date); | 964 var day = MakeDay(YEAR_FROM_TIME(t), month, date); |
| 1003 return %_SetValueOf(this, TimeClip(UTC(MakeDate(day, TimeWithinDay(t))))); | 965 return %_SetValueOf(this, TimeClip(UTC(MakeDate(day, TimeWithinDay(t))))); |
| 1004 } | 966 } |
| 1005 | 967 |
| 1006 | 968 |
| 1007 // ECMA 262 - 15.9.5.39 | 969 // ECMA 262 - 15.9.5.39 |
| 1008 function DateSetUTCMonth(month, date) { | 970 function DateSetUTCMonth(month, date) { |
| 1009 var t = DATE_VALUE(this); | 971 var t = DATE_VALUE(this); |
| 1010 month = ToNumber(month); | 972 month = ToNumber(month); |
| 1011 date = %_ArgumentsLength() < 2 ? GetUTCDateFrom(this) : ToNumber(date); | 973 date = %_ArgumentsLength() < 2 ? GetUTCDateFrom(this) : ToNumber(date); |
| 1012 var day = MakeDay(YearFromTime(t), month, date); | 974 var day = MakeDay(YEAR_FROM_TIME(t), month, date); |
| 1013 return %_SetValueOf(this, TimeClip(MakeDate(day, TimeWithinDay(t)))); | 975 return %_SetValueOf(this, TimeClip(MakeDate(day, TimeWithinDay(t)))); |
| 1014 } | 976 } |
| 1015 | 977 |
| 1016 | 978 |
| 1017 // ECMA 262 - 15.9.5.40 | 979 // ECMA 262 - 15.9.5.40 |
| 1018 function DateSetFullYear(year, month, date) { | 980 function DateSetFullYear(year, month, date) { |
| 1019 var t = DATE_VALUE(this); | 981 var t = DATE_VALUE(this); |
| 1020 t = NUMBER_IS_NAN(t) ? 0 : LocalTimeNoCheck(t); | 982 t = NUMBER_IS_NAN(t) ? 0 : LocalTimeNoCheck(t); |
| 1021 year = ToNumber(year); | 983 year = ToNumber(year); |
| 1022 var argc = %_ArgumentsLength(); | 984 var argc = %_ArgumentsLength(); |
| 1023 month = argc < 2 ? MonthFromTime(t) : ToNumber(month); | 985 month = argc < 2 ? MONTH_FROM_TIME(t) : ToNumber(month); |
| 1024 date = argc < 3 ? DateFromTime(t) : ToNumber(date); | 986 date = argc < 3 ? DATE_FROM_TIME(t) : ToNumber(date); |
| 1025 var day = MakeDay(year, month, date); | 987 var day = MakeDay(year, month, date); |
| 1026 return %_SetValueOf(this, TimeClip(UTC(MakeDate(day, TimeWithinDay(t))))); | 988 return %_SetValueOf(this, TimeClip(UTC(MakeDate(day, TimeWithinDay(t))))); |
| 1027 } | 989 } |
| 1028 | 990 |
| 1029 | 991 |
| 1030 // ECMA 262 - 15.9.5.41 | 992 // ECMA 262 - 15.9.5.41 |
| 1031 function DateSetUTCFullYear(year, month, date) { | 993 function DateSetUTCFullYear(year, month, date) { |
| 1032 var t = DATE_VALUE(this); | 994 var t = DATE_VALUE(this); |
| 1033 if (NUMBER_IS_NAN(t)) t = 0; | 995 if (NUMBER_IS_NAN(t)) t = 0; |
| 1034 var argc = %_ArgumentsLength(); | 996 var argc = %_ArgumentsLength(); |
| 1035 year = ToNumber(year); | 997 year = ToNumber(year); |
| 1036 month = argc < 2 ? MonthFromTime(t) : ToNumber(month); | 998 month = argc < 2 ? MONTH_FROM_TIME(t) : ToNumber(month); |
| 1037 date = argc < 3 ? DateFromTime(t) : ToNumber(date); | 999 date = argc < 3 ? DATE_FROM_TIME(t) : ToNumber(date); |
| 1038 var day = MakeDay(year, month, date); | 1000 var day = MakeDay(year, month, date); |
| 1039 return %_SetValueOf(this, TimeClip(MakeDate(day, TimeWithinDay(t)))); | 1001 return %_SetValueOf(this, TimeClip(MakeDate(day, TimeWithinDay(t)))); |
| 1040 } | 1002 } |
| 1041 | 1003 |
| 1042 | 1004 |
| 1043 // ECMA 262 - 15.9.5.42 | 1005 // ECMA 262 - 15.9.5.42 |
| 1044 function DateToUTCString() { | 1006 function DateToUTCString() { |
| 1045 var t = DATE_VALUE(this); | 1007 var t = DATE_VALUE(this); |
| 1046 if (NUMBER_IS_NAN(t)) return kInvalidDate; | 1008 if (NUMBER_IS_NAN(t)) return kInvalidDate; |
| 1047 // Return UTC string of the form: Sat, 31 Jan 1970 23:00:00 GMT | 1009 // Return UTC string of the form: Sat, 31 Jan 1970 23:00:00 GMT |
| 1048 return WeekDays[WeekDay(t)] + ', ' | 1010 return WeekDays[WeekDay(t)] + ', ' |
| 1049 + TwoDigitString(DateFromTime(t)) + ' ' | 1011 + TwoDigitString(DATE_FROM_TIME(t)) + ' ' |
| 1050 + Months[MonthFromTime(t)] + ' ' | 1012 + Months[MONTH_FROM_TIME(t)] + ' ' |
| 1051 + YearFromTime(t) + ' ' | 1013 + YEAR_FROM_TIME(t) + ' ' |
| 1052 + TimeString(t) + ' GMT'; | 1014 + TimeString(t) + ' GMT'; |
| 1053 } | 1015 } |
| 1054 | 1016 |
| 1055 | 1017 |
| 1056 // ECMA 262 - B.2.4 | 1018 // ECMA 262 - B.2.4 |
| 1057 function DateGetYear() { | 1019 function DateGetYear() { |
| 1058 var t = DATE_VALUE(this); | 1020 var t = DATE_VALUE(this); |
| 1059 if (NUMBER_IS_NAN(t)) return $NaN; | 1021 if (NUMBER_IS_NAN(t)) return $NaN; |
| 1060 return YearFromTime(LocalTimeNoCheck(t)) - 1900; | 1022 return YEAR_FROM_TIME(LocalTimeNoCheck(t)) - 1900; |
| 1061 } | 1023 } |
| 1062 | 1024 |
| 1063 | 1025 |
| 1064 // ECMA 262 - B.2.5 | 1026 // ECMA 262 - B.2.5 |
| 1065 function DateSetYear(year) { | 1027 function DateSetYear(year) { |
| 1066 var t = LocalTime(DATE_VALUE(this)); | 1028 var t = LocalTime(DATE_VALUE(this)); |
| 1067 if (NUMBER_IS_NAN(t)) t = 0; | 1029 if (NUMBER_IS_NAN(t)) t = 0; |
| 1068 year = ToNumber(year); | 1030 year = ToNumber(year); |
| 1069 if (NUMBER_IS_NAN(year)) return %_SetValueOf(this, $NaN); | 1031 if (NUMBER_IS_NAN(year)) return %_SetValueOf(this, $NaN); |
| 1070 year = (0 <= TO_INTEGER(year) && TO_INTEGER(year) <= 99) | 1032 year = (0 <= TO_INTEGER(year) && TO_INTEGER(year) <= 99) |
| 1071 ? 1900 + TO_INTEGER(year) : year; | 1033 ? 1900 + TO_INTEGER(year) : year; |
| 1072 var day = MakeDay(year, MonthFromTime(t), DateFromTime(t)); | 1034 var day = MakeDay(year, MONTH_FROM_TIME(t), DATE_FROM_TIME(t)); |
| 1073 return %_SetValueOf(this, TimeClip(UTC(MakeDate(day, TimeWithinDay(t))))); | 1035 return %_SetValueOf(this, TimeClip(UTC(MakeDate(day, TimeWithinDay(t))))); |
| 1074 } | 1036 } |
| 1075 | 1037 |
| 1076 | 1038 |
| 1077 // ECMA 262 - B.2.6 | 1039 // ECMA 262 - B.2.6 |
| 1078 // | 1040 // |
| 1079 // Notice that this does not follow ECMA 262 completely. ECMA 262 | 1041 // Notice that this does not follow ECMA 262 completely. ECMA 262 |
| 1080 // says that toGMTString should be the same Function object as | 1042 // says that toGMTString should be the same Function object as |
| 1081 // toUTCString. JSC does not do this, so for compatibility we do not | 1043 // toUTCString. JSC does not do this, so for compatibility we do not |
| 1082 // do that either. Instead, we create a new function whose name | 1044 // do that either. Instead, we create a new function whose name |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1164 "toGMTString", DateToGMTString, | 1126 "toGMTString", DateToGMTString, |
| 1165 "toUTCString", DateToUTCString, | 1127 "toUTCString", DateToUTCString, |
| 1166 "getYear", DateGetYear, | 1128 "getYear", DateGetYear, |
| 1167 "setYear", DateSetYear, | 1129 "setYear", DateSetYear, |
| 1168 "toISOString", DateToISOString, | 1130 "toISOString", DateToISOString, |
| 1169 "toJSON", DateToJSON | 1131 "toJSON", DateToJSON |
| 1170 )); | 1132 )); |
| 1171 } | 1133 } |
| 1172 | 1134 |
| 1173 SetupDate(); | 1135 SetupDate(); |
| OLD | NEW |