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