13100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// Copyright 2006-2008 the V8 project authors. All rights reserved.
23100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// Redistribution and use in source and binary forms, with or without
33100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// modification, are permitted provided that the following conditions are
43100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// met:
53100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu//
63100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu//     * Redistributions of source code must retain the above copyright
73100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu//       notice, this list of conditions and the following disclaimer.
83100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu//     * Redistributions in binary form must reproduce the above
93100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu//       copyright notice, this list of conditions and the following
103100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu//       disclaimer in the documentation and/or other materials provided
113100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu//       with the distribution.
123100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu//     * Neither the name of Google Inc. nor the names of its
133100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu//       contributors may be used to endorse or promote products derived
143100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu//       from this software without specific prior written permission.
153100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu//
163100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
173100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
183100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
193100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
203100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
213100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
223100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
233100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
243100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
253100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
263100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
273100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
283100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
293100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// This file relies on the fact that the following declarations have been made
303100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// in v8natives.js:
313ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// var $isFinite = GlobalIsFinite;
323100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
333100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// -------------------------------------------------------------------
343100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
353100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// This file contains date support implemented in JavaScript.
363100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
373100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// Keep reference to original values of some global properties.  This
383100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// has the added benefit that the code in this file is isolated from
393100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// changes to these properties.
403ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochvar $Date = global.Date;
413100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
423100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// Helper function to throw error.
433100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction ThrowDateTypeError() {
443100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  throw new $TypeError('this is not a Date object.');
453100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
463100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
473100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
483100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescuvar timezone_cache_time = $NaN;
493100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescuvar timezone_cache_timezone;
503100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
513100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction LocalTimezone(t) {
523100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  if (NUMBER_IS_NAN(t)) return "";
533100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  if (t == timezone_cache_time) {
543100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    return timezone_cache_timezone;
553100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  }
563ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  var timezone = %DateLocalTimezone(t);
573100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  timezone_cache_time = t;
583100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  timezone_cache_timezone = timezone;
593100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  return timezone;
603100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
613100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
623100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
633100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction UTC(time) {
643100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  if (NUMBER_IS_NAN(time)) return time;
656599b9dd3411791c9d89ab7efbfb4131e5664c48Andrei Popescu  // local_time_offset is needed before the call to DaylightSavingsOffset,
666599b9dd3411791c9d89ab7efbfb4131e5664c48Andrei Popescu  // so it may be uninitialized.
673ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return %DateToUTC(time);
683100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
693100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
703100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
713100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - 15.9.1.11
723100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction MakeTime(hour, min, sec, ms) {
733100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  if (!$isFinite(hour)) return $NaN;
743100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  if (!$isFinite(min)) return $NaN;
753100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  if (!$isFinite(sec)) return $NaN;
763100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  if (!$isFinite(ms)) return $NaN;
773100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  return TO_INTEGER(hour) * msPerHour
783100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu      + TO_INTEGER(min) * msPerMinute
793100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu      + TO_INTEGER(sec) * msPerSecond
803100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu      + TO_INTEGER(ms);
813100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
823100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
833100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
843100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - 15.9.1.12
853100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction TimeInYear(year) {
863100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  return DaysInYear(year) * msPerDay;
873100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
883100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
893100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
903100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// Compute number of days given a year, month, date.
913100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// Note that month and date can lie outside the normal range.
923100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu//   For example:
933100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu//     MakeDay(2007, -4, 20) --> MakeDay(2006, 8, 20)
943100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu//     MakeDay(2007, -33, 1) --> MakeDay(2004, 3, 1)
953100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu//     MakeDay(2007, 14, -50) --> MakeDay(2007, 8, 11)
963100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction MakeDay(year, month, date) {
973100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  if (!$isFinite(year) || !$isFinite(month) || !$isFinite(date)) return $NaN;
983100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
998defd9ff6930b4e24729971a61cf7469daf119beSteve Block  // Convert to integer and map -0 to 0.
1008defd9ff6930b4e24729971a61cf7469daf119beSteve Block  year = TO_INTEGER_MAP_MINUS_ZERO(year);
1018defd9ff6930b4e24729971a61cf7469daf119beSteve Block  month = TO_INTEGER_MAP_MINUS_ZERO(month);
1028defd9ff6930b4e24729971a61cf7469daf119beSteve Block  date = TO_INTEGER_MAP_MINUS_ZERO(date);
1033100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
1046ded16be15dd865a9b21ea304d5273c8be299c87Steve Block  if (year < kMinYear || year > kMaxYear ||
1053ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      month < kMinMonth || month > kMaxMonth) {
1066ded16be15dd865a9b21ea304d5273c8be299c87Steve Block    return $NaN;
1073100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  }
1083100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
1093ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  // Now we rely on year and month being SMIs.
1103ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return %DateMakeDay(year, month) + date - 1;
1113100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
1123100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
1133100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
1143100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - 15.9.1.13
1153100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction MakeDate(day, time) {
116b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch  var time = day * msPerDay + time;
117b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch  // Some of our runtime funtions for computing UTC(time) rely on
118b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch  // times not being significantly larger than MAX_TIME_MS. If there
119b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch  // is no way that the time can be within range even after UTC
120b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch  // conversion we return NaN immediately instead of relying on
121b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch  // TimeClip to do it.
122b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch  if ($abs(time) > MAX_TIME_BEFORE_UTC) return $NaN;
123b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch  return time;
1243100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
1253100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
1263100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
1273100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - 15.9.1.14
1283100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction TimeClip(time) {
1293100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  if (!$isFinite(time)) return $NaN;
130b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch  if ($abs(time) > MAX_TIME_MS) return $NaN;
1313100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  return TO_INTEGER(time);
1323100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
1333100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
1343100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
1353100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// The Date cache is used to limit the cost of parsing the same Date
1363100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// strings over and over again.
1373100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescuvar Date_cache = {
1383100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  // Cached time value.
1393100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  time: $NaN,
1403100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  // String input for which the cached time is valid.
1413100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  string: null
1423100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu};
1433100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
1443100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
1453100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu%SetCode($Date, function(year, month, date, hours, minutes, seconds, ms) {
1463100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  if (!%_IsConstructCall()) {
1473100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    // ECMA 262 - 15.9.2
1483100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    return (new $Date()).toString();
1493100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  }
1503100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
1513100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  // ECMA 262 - 15.9.3
1523100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  var argc = %_ArgumentsLength();
1533100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  var value;
1543100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  if (argc == 0) {
1553100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    value = %DateCurrentTime();
1563ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    SET_UTC_DATE_VALUE(this, value);
1573100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  } else if (argc == 1) {
1583100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    if (IS_NUMBER(year)) {
1593ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      value = year;
1603100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    } else if (IS_STRING(year)) {
1613100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu      // Probe the Date cache. If we already have a time value for the
1623100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu      // given time, we re-use that instead of parsing the string again.
1633100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu      var cache = Date_cache;
1643100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu      if (cache.string === year) {
1653100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu        value = cache.time;
1663100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu      } else {
1673100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu        value = DateParse(year);
1683100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu        if (!NUMBER_IS_NAN(value)) {
1693100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu          cache.time = value;
1703100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu          cache.string = year;
1713100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu        }
1723100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu      }
1733100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
1743100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    } else {
1753100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu      // According to ECMA 262, no hint should be given for this
1763100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu      // conversion. However, ToPrimitive defaults to STRING_HINT for
1773100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu      // Date objects which will lose precision when the Date
1783100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu      // constructor is called with another Date object as its
1793100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu      // argument. We therefore use NUMBER_HINT for the conversion,
1803100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu      // which is the default for everything else than Date objects.
1813100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu      // This makes us behave like KJS and SpiderMonkey.
1823100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu      var time = ToPrimitive(year, NUMBER_HINT);
1833ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      value = IS_STRING(time) ? DateParse(time) : ToNumber(time);
1843100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    }
1853ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    SET_UTC_DATE_VALUE(this, value);
1863100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  } else {
1873100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    year = ToNumber(year);
1883100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    month = ToNumber(month);
1893100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    date = argc > 2 ? ToNumber(date) : 1;
1903100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    hours = argc > 3 ? ToNumber(hours) : 0;
1913100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    minutes = argc > 4 ? ToNumber(minutes) : 0;
1923100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    seconds = argc > 5 ? ToNumber(seconds) : 0;
1933100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    ms = argc > 6 ? ToNumber(ms) : 0;
1943ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    year = (!NUMBER_IS_NAN(year) &&
1953ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch            0 <= TO_INTEGER(year) &&
1963ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch            TO_INTEGER(year) <= 99) ? 1900 + TO_INTEGER(year) : year;
1973100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    var day = MakeDay(year, month, date);
1983100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    var time = MakeTime(hours, minutes, seconds, ms);
1993ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    value = MakeDate(day, time);
2003ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    SET_LOCAL_DATE_VALUE(this, value);
2013100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  }
2023100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu});
2033100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
2043100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
2053100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu%FunctionSetPrototype($Date, new $Date($NaN));
2063100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
2073100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
2083100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescuvar WeekDays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
2093ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochvar Months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
2103ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch              'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
2113100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
2123100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
2133100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction TwoDigitString(value) {
2143100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  return value < 10 ? "0" + value : "" + value;
2153100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
2163100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
2173100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
2183ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction DateString(date) {
2193ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return WeekDays[LOCAL_WEEKDAY(date)] + ' '
2203ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      + Months[LOCAL_MONTH(date)] + ' '
2213ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      + TwoDigitString(LOCAL_DAY(date)) + ' '
2223ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      + LOCAL_YEAR(date);
2233100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
2243100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
2253100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
2263ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochvar LongWeekDays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday',
2273ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    'Thursday', 'Friday', 'Saturday'];
2283ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochvar LongMonths = ['January', 'February', 'March', 'April', 'May', 'June',
2293ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    'July', 'August', 'September', 'October', 'November', 'December'];
2303100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
2313100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
2323ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction LongDateString(date) {
2333ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return LongWeekDays[LOCAL_WEEKDAY(date)] + ', '
2343ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      + LongMonths[LOCAL_MONTH(date)] + ' '
2353ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      + TwoDigitString(LOCAL_DAY(date)) + ', '
2363ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      + LOCAL_YEAR(date);
2373100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
2383100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
2393100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
2403ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction TimeString(date) {
2413ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return TwoDigitString(LOCAL_HOUR(date)) + ':'
2423ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      + TwoDigitString(LOCAL_MIN(date)) + ':'
2433ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      + TwoDigitString(LOCAL_SEC(date));
2443100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
2453100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
2463100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
2473ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction TimeStringUTC(date) {
2483ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return TwoDigitString(UTC_HOUR(date)) + ':'
2493ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      + TwoDigitString(UTC_MIN(date)) + ':'
2503ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      + TwoDigitString(UTC_SEC(date));
2513ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch}
252d69d2e30f295acb0d25771f412ca271869d0ba43Ben Murdoch
2533ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
2543ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction LocalTimezoneString(date) {
2553ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  var timezone = LocalTimezone(UTC_DATE_VALUE(date));
2563ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch
2573ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  var timezoneOffset = -TIMEZONE_OFFSET(date);
2583100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  var sign = (timezoneOffset >= 0) ? 1 : -1;
2593100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  var hours = FLOOR((sign * timezoneOffset)/60);
2603100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  var min   = FLOOR((sign * timezoneOffset)%60);
2613100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  var gmt = ' GMT' + ((sign == 1) ? '+' : '-') +
2623100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu      TwoDigitString(hours) + TwoDigitString(min);
263d69d2e30f295acb0d25771f412ca271869d0ba43Ben Murdoch  return gmt + ' (' +  timezone + ')';
2643100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
2653100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
2663100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
2673ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction DatePrintString(date) {
2683ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return DateString(date) + ' ' + TimeString(date);
2693100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
2703100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
2713100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// -------------------------------------------------------------------
2723100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
2733100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// Reused output buffer. Used when parsing date strings.
2746ded16be15dd865a9b21ea304d5273c8be299c87Steve Blockvar parse_buffer = $Array(8);
2753100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
2763100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - 15.9.4.2
2773100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction DateParse(string) {
2783100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  var arr = %DateParseString(ToString(string), parse_buffer);
2793100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  if (IS_NULL(arr)) return $NaN;
2803100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
2813100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  var day = MakeDay(arr[0], arr[1], arr[2]);
2826ded16be15dd865a9b21ea304d5273c8be299c87Steve Block  var time = MakeTime(arr[3], arr[4], arr[5], arr[6]);
2833100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  var date = MakeDate(day, time);
2843100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
2856ded16be15dd865a9b21ea304d5273c8be299c87Steve Block  if (IS_NULL(arr[7])) {
2863100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    return TimeClip(UTC(date));
2873100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  } else {
2886ded16be15dd865a9b21ea304d5273c8be299c87Steve Block    return TimeClip(date - arr[7] * 1000);
2893100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  }
2903100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
2913100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
2923100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
2933100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - 15.9.4.3
2943100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction DateUTC(year, month, date, hours, minutes, seconds, ms) {
2953100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  year = ToNumber(year);
2963100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  month = ToNumber(month);
2973100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  var argc = %_ArgumentsLength();
2983100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  date = argc > 2 ? ToNumber(date) : 1;
2993100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  hours = argc > 3 ? ToNumber(hours) : 0;
3003100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  minutes = argc > 4 ? ToNumber(minutes) : 0;
3013100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  seconds = argc > 5 ? ToNumber(seconds) : 0;
3023100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  ms = argc > 6 ? ToNumber(ms) : 0;
3033ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  year = (!NUMBER_IS_NAN(year) &&
3043ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch          0 <= TO_INTEGER(year) &&
3053ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch          TO_INTEGER(year) <= 99) ? 1900 + TO_INTEGER(year) : year;
3063100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  var day = MakeDay(year, month, date);
3073100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  var time = MakeTime(hours, minutes, seconds, ms);
3083ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return TimeClip(MakeDate(day, time));
3093100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
3103100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
3113100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
3123100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// Mozilla-specific extension. Returns the number of milliseconds
3133100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// elapsed since 1 January 1970 00:00:00 UTC.
3143100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction DateNow() {
3153100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  return %DateCurrentTime();
3163100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
3173100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
3183100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
3193100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - 15.9.5.2
3203100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction DateToString() {
3213ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  CHECK_DATE(this);
3223ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  var t = UTC_DATE_VALUE(this)
3233100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  if (NUMBER_IS_NAN(t)) return kInvalidDate;
3243ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  var time_zone_string = LocalTimezoneString(this)
3253ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return DatePrintString(this) + time_zone_string;
3263100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
3273100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
3283100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
3293100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - 15.9.5.3
3303100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction DateToDateString() {
3313ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  CHECK_DATE(this);
3323ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  var t = UTC_DATE_VALUE(this);
3333100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  if (NUMBER_IS_NAN(t)) return kInvalidDate;
3343ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return DateString(this);
3353100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
3363100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
3373100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
3383100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - 15.9.5.4
3393100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction DateToTimeString() {
3403ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  CHECK_DATE(this);
3413ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  var t = UTC_DATE_VALUE(this);
3423100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  if (NUMBER_IS_NAN(t)) return kInvalidDate;
3433ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  var time_zone_string = LocalTimezoneString(this);
3443ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return TimeString(this) + time_zone_string;
3453100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
3463100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
3473100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
3483100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - 15.9.5.5
3493100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction DateToLocaleString() {
3501e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block  return %_CallFunction(this, DateToString);
3513100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
3523100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
3533100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
3543100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - 15.9.5.6
3553100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction DateToLocaleDateString() {
3563ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  CHECK_DATE(this);
3573ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  var t = UTC_DATE_VALUE(this);
3583100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  if (NUMBER_IS_NAN(t)) return kInvalidDate;
3593ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return LongDateString(this);
3603100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
3613100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
3623100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
3633100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - 15.9.5.7
3643100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction DateToLocaleTimeString() {
3653ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  CHECK_DATE(this);
3663ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  var t = UTC_DATE_VALUE(this);
3673100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  if (NUMBER_IS_NAN(t)) return kInvalidDate;
3683ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return TimeString(this);
3693100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
3703100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
3713100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
3723100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - 15.9.5.8
3733100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction DateValueOf() {
3743ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  CHECK_DATE(this);
3753ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return UTC_DATE_VALUE(this);
3763100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
3773100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
3783100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
3793100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - 15.9.5.9
380402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescufunction DateGetTime() {
3813ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  CHECK_DATE(this);
3823ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return UTC_DATE_VALUE(this);
3833100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
3843100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
3853100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
3863100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - 15.9.5.10
3873100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction DateGetFullYear() {
3883ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  CHECK_DATE(this);
3893ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return LOCAL_YEAR(this);
3903100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
3913100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
3923100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
3933100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - 15.9.5.11
3943100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction DateGetUTCFullYear() {
3953ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  CHECK_DATE(this);
3963ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return UTC_YEAR(this);
3973100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
3983100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
3993100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
4003100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - 15.9.5.12
4013100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction DateGetMonth() {
4023ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  CHECK_DATE(this);
4033ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return LOCAL_MONTH(this);
4043100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
4053100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
4063100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
4073100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - 15.9.5.13
4083100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction DateGetUTCMonth() {
4093ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  CHECK_DATE(this);
4103ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return UTC_MONTH(this);
4113100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
4123100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
4133100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
4143100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - 15.9.5.14
4153100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction DateGetDate() {
4163ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  CHECK_DATE(this);
4173ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return LOCAL_DAY(this);
4183100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
4193100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
4203100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
4213100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - 15.9.5.15
4223100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction DateGetUTCDate() {
4233ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  CHECK_DATE(this);
4243ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return UTC_DAY(this);
4253100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
4263100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
4273100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
4283100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - 15.9.5.16
4293100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction DateGetDay() {
4303ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  CHECK_DATE(this);
4313ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return LOCAL_WEEKDAY(this);
4323100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
4333100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
4343100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
4353100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - 15.9.5.17
4363100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction DateGetUTCDay() {
4373ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  CHECK_DATE(this);
4383ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return UTC_WEEKDAY(this);
4393100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
4403100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
4413100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
4423100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - 15.9.5.18
4433100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction DateGetHours() {
4443ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  CHECK_DATE(this);
4453ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return LOCAL_HOUR(this);
4463100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
4473100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
4483100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
4493100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - 15.9.5.19
4503100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction DateGetUTCHours() {
4513ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  CHECK_DATE(this);
4523ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return UTC_HOUR(this);
4533100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
4543100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
4553100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
4563100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - 15.9.5.20
4573100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction DateGetMinutes() {
4583ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  CHECK_DATE(this);
4593ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return LOCAL_MIN(this);
4603100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
4613100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
4623100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
4633100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - 15.9.5.21
4643100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction DateGetUTCMinutes() {
4653ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  CHECK_DATE(this);
4663ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return UTC_MIN(this);
4673100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
4683100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
4693100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
4703100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - 15.9.5.22
4713100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction DateGetSeconds() {
4723ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  CHECK_DATE(this);
4733ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return LOCAL_SEC(this);
4743100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
4753100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
4763100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
4773100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - 15.9.5.23
4783100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction DateGetUTCSeconds() {
4793ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  CHECK_DATE(this);
4803ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return UTC_SEC(this)
4813100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
4823100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
4833100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
4843100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - 15.9.5.24
4853100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction DateGetMilliseconds() {
4863ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  CHECK_DATE(this);
4873ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return LOCAL_MS(this);
4883100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
4893100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
4903100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
4913100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - 15.9.5.25
4923100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction DateGetUTCMilliseconds() {
4933ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  CHECK_DATE(this);
4943ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return UTC_MS(this);
4953100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
4963100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
4973100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
4983100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - 15.9.5.26
4993100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction DateGetTimezoneOffset() {
5003ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  CHECK_DATE(this);
5013ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return TIMEZONE_OFFSET(this);
5023100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
5033100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
5043100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
5053100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - 15.9.5.27
5063100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction DateSetTime(ms) {
5073ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  CHECK_DATE(this);
5083ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  SET_UTC_DATE_VALUE(this, ToNumber(ms));
5093ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return UTC_DATE_VALUE(this);
5103100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
5113100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
5123100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
5133100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - 15.9.5.28
5143100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction DateSetMilliseconds(ms) {
5153ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  CHECK_DATE(this);
5163ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  var t = LOCAL_DATE_VALUE(this);
5173100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  ms = ToNumber(ms);
5183ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  var time = MakeTime(LOCAL_HOUR(this), LOCAL_MIN(this), LOCAL_SEC(this), ms);
51984774f4b8cb56f14184c96dd08fb2ae119d986e0Ben Murdoch  return SET_LOCAL_DATE_VALUE(this, MakeDate(LOCAL_DAYS(this), time));
5203100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
5213100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
5223100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
5233100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - 15.9.5.29
5243100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction DateSetUTCMilliseconds(ms) {
5253ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  CHECK_DATE(this);
5263ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  var t = UTC_DATE_VALUE(this);
5273100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  ms = ToNumber(ms);
5283ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  var time = MakeTime(UTC_HOUR(this),
5293ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch                      UTC_MIN(this),
5303ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch                      UTC_SEC(this),
5313ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch                      ms);
5323ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return SET_UTC_DATE_VALUE(this, MakeDate(UTC_DAYS(this), time));
5333100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
5343100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
5353100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
5363100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - 15.9.5.30
5373100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction DateSetSeconds(sec, ms) {
5383ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  CHECK_DATE(this);
5393ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  var t = LOCAL_DATE_VALUE(this);
5403100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  sec = ToNumber(sec);
5413ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  ms = %_ArgumentsLength() < 2 ? LOCAL_MS(this) : ToNumber(ms);
5423ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  var time = MakeTime(LOCAL_HOUR(this), LOCAL_MIN(this), sec, ms);
5433ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return SET_LOCAL_DATE_VALUE(this, MakeDate(LOCAL_DAYS(this), time));
5443100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
5453100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
5463100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
5473100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - 15.9.5.31
5483100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction DateSetUTCSeconds(sec, ms) {
5493ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  CHECK_DATE(this);
5503ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  var t = UTC_DATE_VALUE(this);
5513100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  sec = ToNumber(sec);
5523ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  ms = %_ArgumentsLength() < 2 ? UTC_MS(this) : ToNumber(ms);
5533ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  var time = MakeTime(UTC_HOUR(this), UTC_MIN(this), sec, ms);
5543ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return SET_UTC_DATE_VALUE(this, MakeDate(UTC_DAYS(this), time));
5553100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
5563100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
5573100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
5583100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - 15.9.5.33
5593100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction DateSetMinutes(min, sec, ms) {
5603ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  CHECK_DATE(this);
5613ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  var t = LOCAL_DATE_VALUE(this);
5623100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  min = ToNumber(min);
5633100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  var argc = %_ArgumentsLength();
5643ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  sec = argc < 2 ? LOCAL_SEC(this) : ToNumber(sec);
5653ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  ms = argc < 3 ? LOCAL_MS(this) : ToNumber(ms);
5663ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  var time = MakeTime(LOCAL_HOUR(this), min, sec, ms);
5673ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return SET_LOCAL_DATE_VALUE(this, MakeDate(LOCAL_DAYS(this), time));
5683100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
5693100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
5703100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
5713100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - 15.9.5.34
5723100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction DateSetUTCMinutes(min, sec, ms) {
5733ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  CHECK_DATE(this);
5743ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  var t = UTC_DATE_VALUE(this);
5753100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  min = ToNumber(min);
5763100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  var argc = %_ArgumentsLength();
5773ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  sec = argc < 2 ? UTC_SEC(this) : ToNumber(sec);
5783ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  ms = argc < 3 ? UTC_MS(this) : ToNumber(ms);
5793ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  var time = MakeTime(UTC_HOUR(this), min, sec, ms);
5803ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return SET_UTC_DATE_VALUE(this, MakeDate(UTC_DAYS(this), time));
5813100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
5823100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
5833100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
5843100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - 15.9.5.35
5853100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction DateSetHours(hour, min, sec, ms) {
5863ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  CHECK_DATE(this);
5873ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  var t = LOCAL_DATE_VALUE(this);
5883100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  hour = ToNumber(hour);
5893100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  var argc = %_ArgumentsLength();
5903ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  min = argc < 2 ? LOCAL_MIN(this) : ToNumber(min);
5913ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  sec = argc < 3 ? LOCAL_SEC(this) : ToNumber(sec);
5923ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  ms = argc < 4 ? LOCAL_MS(this) : ToNumber(ms);
5933100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  var time = MakeTime(hour, min, sec, ms);
5943ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return SET_LOCAL_DATE_VALUE(this, MakeDate(LOCAL_DAYS(this), time));
5953100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
5963100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
5973100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
5983100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - 15.9.5.34
5993100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction DateSetUTCHours(hour, min, sec, ms) {
6003ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  CHECK_DATE(this);
6013ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  var t = UTC_DATE_VALUE(this);
6023100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  hour = ToNumber(hour);
6033100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  var argc = %_ArgumentsLength();
6043ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  min = argc < 2 ? UTC_MIN(this) : ToNumber(min);
6053ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  sec = argc < 3 ? UTC_SEC(this) : ToNumber(sec);
6063ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  ms = argc < 4 ? UTC_MS(this) : ToNumber(ms);
6073100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  var time = MakeTime(hour, min, sec, ms);
6083ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return SET_UTC_DATE_VALUE(this, MakeDate(UTC_DAYS(this), time));
6093100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
6103100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
6113100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
6123100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - 15.9.5.36
6133100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction DateSetDate(date) {
6143ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  CHECK_DATE(this);
6153ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  var t = LOCAL_DATE_VALUE(this);
6163100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  date = ToNumber(date);
6173ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  var day = MakeDay(LOCAL_YEAR(this), LOCAL_MONTH(this), date);
6183ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return SET_LOCAL_DATE_VALUE(this, MakeDate(day, LOCAL_TIME_IN_DAY(this)));
6193100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
6203100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
6213100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
6223100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - 15.9.5.37
6233100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction DateSetUTCDate(date) {
6243ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  CHECK_DATE(this);
6253ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  var t = UTC_DATE_VALUE(this);
6263100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  date = ToNumber(date);
6273ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  var day = MakeDay(UTC_YEAR(this), UTC_MONTH(this), date);
6283ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return SET_UTC_DATE_VALUE(this, MakeDate(day, UTC_TIME_IN_DAY(this)));
6293100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
6303100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
6313100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
6323100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - 15.9.5.38
6333100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction DateSetMonth(month, date) {
6343ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  CHECK_DATE(this);
6353ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  var t = LOCAL_DATE_VALUE(this);
6363100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  month = ToNumber(month);
6373ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  date = %_ArgumentsLength() < 2 ? LOCAL_DAY(this) : ToNumber(date);
6383ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  var day = MakeDay(LOCAL_YEAR(this), month, date);
6393ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return SET_LOCAL_DATE_VALUE(this, MakeDate(day, LOCAL_TIME_IN_DAY(this)));
6403100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
6413100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
6423100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
6433100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - 15.9.5.39
6443100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction DateSetUTCMonth(month, date) {
6453ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  CHECK_DATE(this);
6463ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  var t = UTC_DATE_VALUE(this);
6473100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  month = ToNumber(month);
6483ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  date = %_ArgumentsLength() < 2 ? UTC_DAY(this) : ToNumber(date);
6493ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  var day = MakeDay(UTC_YEAR(this), month, date);
6503ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return SET_UTC_DATE_VALUE(this, MakeDate(day, UTC_TIME_IN_DAY(this)));
6513100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
6523100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
6533100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
6543100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - 15.9.5.40
6553100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction DateSetFullYear(year, month, date) {
6563ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  CHECK_DATE(this);
6573ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  var t = LOCAL_DATE_VALUE(this);
6583100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  year = ToNumber(year);
6593100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  var argc = %_ArgumentsLength();
6603ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  var time ;
6613ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  if (NUMBER_IS_NAN(t)) {
6623ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    month = argc < 2 ? 0 : ToNumber(month);
6633ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    date = argc < 3 ? 1 : ToNumber(date);
6643ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    time = 0;
6653ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  } else {
6663ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    month = argc < 2 ? LOCAL_MONTH(this) : ToNumber(month);
6673ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    date = argc < 3 ? LOCAL_DAY(this) : ToNumber(date);
6683ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    time = LOCAL_TIME_IN_DAY(this);
6693ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  }
6703100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  var day = MakeDay(year, month, date);
6713ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return SET_LOCAL_DATE_VALUE(this, MakeDate(day, time));
6723100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
6733100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
6743100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
6753100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - 15.9.5.41
6763100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction DateSetUTCFullYear(year, month, date) {
6773ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  CHECK_DATE(this);
6783ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  var t = UTC_DATE_VALUE(this);
67985b71799222b55eb5dd74ea26efe0c64ab655c8cBen Murdoch  year = ToNumber(year);
6803ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  var argc = %_ArgumentsLength();
6813ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  var time ;
6823ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  if (NUMBER_IS_NAN(t)) {
6833ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    month = argc < 2 ? 0 : ToNumber(month);
6843ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    date = argc < 3 ? 1 : ToNumber(date);
6853ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    time = 0;
6863ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  } else {
6873ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    month = argc < 2 ? UTC_MONTH(this) : ToNumber(month);
6883ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    date = argc < 3 ? UTC_DAY(this) : ToNumber(date);
6893ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    time = UTC_TIME_IN_DAY(this);
6903ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  }
6913100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  var day = MakeDay(year, month, date);
6923ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return SET_UTC_DATE_VALUE(this, MakeDate(day, time));
6933100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
6943100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
6953100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
6963100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - 15.9.5.42
6973100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction DateToUTCString() {
6983ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  CHECK_DATE(this);
6993ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  var t = UTC_DATE_VALUE(this);
7003100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  if (NUMBER_IS_NAN(t)) return kInvalidDate;
7013100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  // Return UTC string of the form: Sat, 31 Jan 1970 23:00:00 GMT
7023ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return WeekDays[UTC_WEEKDAY(this)] + ', '
7033ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      + TwoDigitString(UTC_DAY(this)) + ' '
7043ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      + Months[UTC_MONTH(this)] + ' '
7053ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      + UTC_YEAR(this) + ' '
7063ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch      + TimeStringUTC(this) + ' GMT';
7073100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
7083100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
7093100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
7103100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - B.2.4
7113100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction DateGetYear() {
7123ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  CHECK_DATE(this);
7133ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return LOCAL_YEAR(this) - 1900;
7143100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
7153100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
7163100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
7173100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - B.2.5
7183100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction DateSetYear(year) {
7193ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  CHECK_DATE(this);
7203100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  year = ToNumber(year);
7213ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  if (NUMBER_IS_NAN(year)) return SET_UTC_DATE_VALUE(this, $NaN);
7223100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  year = (0 <= TO_INTEGER(year) && TO_INTEGER(year) <= 99)
7233100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu      ? 1900 + TO_INTEGER(year) : year;
7243ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  var t = LOCAL_DATE_VALUE(this);
7253ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  var month, date, time;
7263ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  if (NUMBER_IS_NAN(t))  {
7273ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    month = 0;
7283ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    date = 1;
7293ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    time = 0;
7303ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  } else {
7313ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    month = LOCAL_MONTH(this);
7323ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    date = LOCAL_DAY(this);
7333ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch    time = LOCAL_TIME_IN_DAY(this);
7343ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  }
7353ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  var day = MakeDay(year, month, date);
7363ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  return SET_LOCAL_DATE_VALUE(this, MakeDate(day, time));
7373100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
7383100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
7393100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
7403100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// ECMA 262 - B.2.6
7413100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu//
7423100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// Notice that this does not follow ECMA 262 completely.  ECMA 262
7433100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// says that toGMTString should be the same Function object as
7443100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// toUTCString.  JSC does not do this, so for compatibility we do not
7453100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// do that either.  Instead, we create a new function whose name
7463100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// property will return toGMTString.
7473100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction DateToGMTString() {
7481e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block  return %_CallFunction(this, DateToUTCString);
7493100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
7503100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
7513100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
7523100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction PadInt(n, digits) {
7533100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  if (digits == 1) return n;
7543100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  return n < MathPow(10, digits - 1) ? '0' + PadInt(n, digits - 1) : n;
7553100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
7563100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
7573100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
7583ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// ECMA 262 - 15.9.5.43
7593100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction DateToISOString() {
7603ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  CHECK_DATE(this);
7613ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  var t = UTC_DATE_VALUE(this);
7623ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  if (NUMBER_IS_NAN(t)) throw MakeRangeError("invalid_time_value", []);
7633fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch  var year = this.getUTCFullYear();
7643fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch  var year_string;
7653fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch  if (year >= 0 && year <= 9999) {
7663fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch    year_string = PadInt(year, 4);
7673fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch  } else {
7683fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch    if (year < 0) {
7693fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch      year_string = "-" + PadInt(-year, 6);
7703fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch    } else {
7713fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch      year_string = "+" + PadInt(year, 6);
7723fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch    }
7733fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch  }
7743fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch  return year_string +
775b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch      '-' + PadInt(this.getUTCMonth() + 1, 2) +
7763fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch      '-' + PadInt(this.getUTCDate(), 2) +
777b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch      'T' + PadInt(this.getUTCHours(), 2) +
7783fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch      ':' + PadInt(this.getUTCMinutes(), 2) +
779b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch      ':' + PadInt(this.getUTCSeconds(), 2) +
7803100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu      '.' + PadInt(this.getUTCMilliseconds(), 3) +
7813100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu      'Z';
7823100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
7833100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
7843100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
7853100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescufunction DateToJSON(key) {
786b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch  var o = ToObject(this);
787b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch  var tv = DefaultNumber(o);
7883fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch  if (IS_NUMBER(tv) && !NUMBER_IS_FINITE(tv)) {
7893fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch    return null;
790b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch  }
791b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch  return o.toISOString();
792b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch}
793b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch
794b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch
795b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdochfunction ResetDateCache() {
796b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch  // Reset the timezone cache:
797b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch  timezone_cache_time = $NaN;
798b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch  timezone_cache_timezone = undefined;
799b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch
800b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch  // Reset the date cache:
801b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch  cache = Date_cache;
802b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch  cache.time = $NaN;
803b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch  cache.string = null;
8043100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
8053100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
8063100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
8073100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu// -------------------------------------------------------------------
8083100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
809589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdochfunction SetUpDate() {
810589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch  %CheckIsBootstrapping();
811589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch  // Set up non-enumerable properties of the Date object itself.
8123100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  InstallFunctions($Date, DONT_ENUM, $Array(
8133100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    "UTC", DateUTC,
8143100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    "parse", DateParse,
8153100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    "now", DateNow
8163100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  ));
8173100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
818589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch  // Set up non-enumerable constructor property of the Date prototype object.
8193100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  %SetProperty($Date.prototype, "constructor", $Date, DONT_ENUM);
8203100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
821589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch  // Set up non-enumerable functions of the Date prototype object and
8223100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  // set their names.
8233ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  InstallFunctions($Date.prototype, DONT_ENUM, $Array(
8243100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    "toString", DateToString,
8253100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    "toDateString", DateToDateString,
8263100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    "toTimeString", DateToTimeString,
8273100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    "toLocaleString", DateToLocaleString,
8283100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    "toLocaleDateString", DateToLocaleDateString,
8293100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    "toLocaleTimeString", DateToLocaleTimeString,
8303100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    "valueOf", DateValueOf,
8313100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    "getTime", DateGetTime,
8323100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    "getFullYear", DateGetFullYear,
8333100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    "getUTCFullYear", DateGetUTCFullYear,
8343100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    "getMonth", DateGetMonth,
8353100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    "getUTCMonth", DateGetUTCMonth,
8363100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    "getDate", DateGetDate,
8373100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    "getUTCDate", DateGetUTCDate,
8383100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    "getDay", DateGetDay,
8393100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    "getUTCDay", DateGetUTCDay,
8403100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    "getHours", DateGetHours,
8413100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    "getUTCHours", DateGetUTCHours,
8423100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    "getMinutes", DateGetMinutes,
8433100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    "getUTCMinutes", DateGetUTCMinutes,
8443100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    "getSeconds", DateGetSeconds,
8453100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    "getUTCSeconds", DateGetUTCSeconds,
8463100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    "getMilliseconds", DateGetMilliseconds,
8473100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    "getUTCMilliseconds", DateGetUTCMilliseconds,
8483100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    "getTimezoneOffset", DateGetTimezoneOffset,
8493100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    "setTime", DateSetTime,
8503100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    "setMilliseconds", DateSetMilliseconds,
8513100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    "setUTCMilliseconds", DateSetUTCMilliseconds,
8523100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    "setSeconds", DateSetSeconds,
8533100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    "setUTCSeconds", DateSetUTCSeconds,
8543100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    "setMinutes", DateSetMinutes,
8553100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    "setUTCMinutes", DateSetUTCMinutes,
8563100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    "setHours", DateSetHours,
8573100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    "setUTCHours", DateSetUTCHours,
8583100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    "setDate", DateSetDate,
8593100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    "setUTCDate", DateSetUTCDate,
8603100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    "setMonth", DateSetMonth,
8613100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    "setUTCMonth", DateSetUTCMonth,
8623100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    "setFullYear", DateSetFullYear,
8633100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    "setUTCFullYear", DateSetUTCFullYear,
8643100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    "toGMTString", DateToGMTString,
8653100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    "toUTCString", DateToUTCString,
8663100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    "getYear", DateGetYear,
8673100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    "setYear", DateSetYear,
8683100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    "toISOString", DateToISOString,
8693100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu    "toJSON", DateToJSON
8703100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu  ));
8713100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu}
8723100271588b61cbc1dc472a3f2f105d2eed8497fAndrei Popescu
873589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben MurdochSetUpDate();
874