21.4 Date Objects
21.4.1 Overview of Date Objects and Definitions of Abstract Operations
The following functions are
21.4.1.1 Time Values and Time Range
Time measurement in ECMAScript is analogous to time measurement in POSIX, in particular sharing definition in terms of the proleptic Gregorian calendar, an epoch of midnight at the beginning of 1 January 1970 UTC, and an accounting of every day as comprising exactly 86,400 seconds (each of which is 1000 milliseconds long).
An ECMAScript time value is a Number, either a finite
Time values do not account for UTC leap seconds—there are no time values representing instants within positive leap seconds, and there are time values representing instants removed from the UTC timeline by negative leap seconds. However, the definition of time values nonetheless yields piecewise alignment with UTC, with discontinuities only at leap second boundaries and zero difference outside of leap seconds.
A Number can exactly represent all integers from 9,007,199,254,740,992 to 9,007,199,254,740,992 (
The exact moment of midnight at the beginning of 1 January 1970 UTC is represented by the time value
The 400 year cycle of the proleptic Gregorian calendar contains 97 leap years. This yields an average of 365.2425 days per year, which is 31,556,952,000 milliseconds. Therefore, the maximum range a Number could represent exactly with millisecond precision is approximately 285,426 to 285,426 years relative to 1970. The smaller range supported by a time value as specified in this section is approximately 273,790 to 273,790 years relative to 1970.
21.4.1.2 Day Number and Time within Day
A given
where the number of milliseconds per day is
The remainder is called the time within the day:
21.4.1.3 Year Number
ECMAScript uses a proleptic Gregorian calendar to map a day number to a year number and to determine the month and date within that year. In this calendar, leap years are precisely those which are (divisible by 4) and ((not divisible by 100) or (divisible by 400)). The number of days in year number y is therefore defined by
All nonleap years have 365 days with the usual number of days per month and leap years have an extra day in February. The day number of the first day of year y is given by:
The
A
The leapyear function is
21.4.1.4 Month Number
Months are identified by an
where
A month value of
21.4.1.5 Date Number
A date number is identified by an
21.4.1.6 Week Day
The weekday for a particular
A weekday value of
21.4.1.7 LocalTZA ( t, isUTC )
LocalTZA( t, isUTC ) is an
When isUTC is true,
When isUTC is false,
Input t is nominally a
When
If an implementation does not support a conversion described above or if political rules for time t are not available within the implementation, the result must be
It is recommended that implementations use the time zone information of the IANA Time Zone Database https://www.iana.org/timezones/.
1:30 AM on 5 November 2017 in America/New_York is repeated twice (fall backward), but it must be interpreted as 1:30 AM UTC04 instead of 1:30 AM UTC05. LocalTZA(
2:30 AM on 12 March 2017 in America/New_York does not exist, but it must be interpreted as 2:30 AM UTC05 (equivalent to 3:30 AM UTC04). LocalTZA(
Local time zone offset values may be positive or negative.
21.4.1.8 LocalTime ( t )
The abstract operation LocalTime takes argument t. It converts t from UTC to local time. It performs the following steps when called:
 Return t +
LocalTZA (t,true ).
Two different input time values
21.4.1.9 UTC ( t )
The abstract operation UTC takes argument t. It converts t from local time to UTC. It performs the following steps when called:
 Return t 
LocalTZA (t,false ).
21.4.1.10 Hours, Minutes, Second, and Milliseconds
The following
where
21.4.1.11 MakeTime ( hour, min, sec, ms )
The abstract operation MakeTime takes arguments hour (a Number), min (a Number), sec (a Number), and ms (a Number). It calculates a number of milliseconds. It performs the following steps when called:
 If hour is not finite or min is not finite or sec is not finite or ms is not finite, return
NaN .  Let h be
𝔽 (!ToIntegerOrInfinity (hour)).  Let m be
𝔽 (!ToIntegerOrInfinity (min)).  Let s be
𝔽 (!ToIntegerOrInfinity (sec)).  Let milli be
𝔽 (!ToIntegerOrInfinity (ms)).  Let t be ((h
*
msPerHour +
m*
msPerMinute )+
s*
msPerSecond )+
milli, performing the arithmetic according toIEEE 7542019 rules (that is, as if using the ECMAScript operators*
and+
).  Return t.
21.4.1.12 MakeDay ( year, month, date )
The abstract operation MakeDay takes arguments year (a Number), month (a Number), and date (a Number). It calculates a number of days. It performs the following steps when called:
 If year is not finite or month is not finite or date is not finite, return
NaN .  Let y be
𝔽 (!ToIntegerOrInfinity (year)).  Let m be
𝔽 (!ToIntegerOrInfinity (month)).  Let dt be
𝔽 (!ToIntegerOrInfinity (date)).  Let ym be y +
𝔽 (floor (ℝ (m) / 12)).  If ym is not finite, return
NaN .  Let mn be
𝔽 (ℝ (m)modulo 12).  Find a finite
time value t such thatYearFromTime (t) is ym andMonthFromTime (t) is mn andDateFromTime (t) is1 _{𝔽}; but if this is not possible (because some argument is out of range), returnNaN .  Return
Day (t) + dt 1 _{𝔽}.
21.4.1.13 MakeDate ( day, time )
The abstract operation MakeDate takes arguments day (a Number) and time (a Number). It calculates a number of milliseconds. It performs the following steps when called:
 If day is not finite or time is not finite, return
NaN .  Let tv be day ×
msPerDay + time.  If tv is not finite, return
NaN .  Return tv.
21.4.1.14 TimeClip ( time )
The abstract operation TimeClip takes argument time (a Number). It calculates a number of milliseconds. It performs the following steps when called:
 If time is not finite, return
NaN .  If
abs (ℝ (time)) > 8.64 × 10^{15}, returnNaN .  Return
𝔽 (!ToIntegerOrInfinity (time)).
21.4.1.15 Date Time String Format
ECMAScript defines a string interchange format for datetimes based upon a simplification of the ISO 8601 calendar date extended format. The format is as follows: YYYYMMDDTHH:mm:ss.sssZ
Where the elements are as follows:
YYYY

is the year in the proleptic Gregorian calendar as four decimal digits from 0000 to 9999, or as an 



MM

is the month of the year as two decimal digits from 01 (January) to 12 (December). 
DD

is the day of the month as two decimal digits from 01 to 31. 
T


HH

is the number of complete hours that have passed since midnight as two decimal digits from 00 to 24. 
:


mm

is the number of complete minutes since the start of the hour as two decimal digits from 00 to 59. 
ss

is the number of complete seconds since the start of the minute as two decimal digits from 00 to 59. 
.


sss

is the number of complete milliseconds since the start of the second as three decimal digits. 
Z

is the UTC offset representation specified as HH:mm (indicating local time ahead of or behind UTC, respectively)

This format includes dateonly forms:
YYYY YYYYMM YYYYMMDD
It also includes “datetime” forms that consist of one of the above dateonly forms immediately followed by one of the following time forms with an optional UTC offset representation appended:
THH:mm THH:mm:ss THH:mm:ss.sss
A string containing outofbounds or nonconforming elements is not a valid instance of this format.
As every day both starts and ends with midnight, the two notations 00:00
and 24:00
are available to distinguish the two midnights that can be associated with one date. This means that the following two notations refer to exactly the same point in time: 19950204T24:00
and 19950205T00:00
. This interpretation of the latter form as "end of a calendar day" is consistent with ISO 8601, even though that specification reserves it for describing time intervals and does not permit it within representations of single points in time.
There exists no international standard that specifies abbreviations for civil time zones like CET, EST, etc. and sometimes the same abbreviation is even used for two very different time zones. For this reason, both ISO 8601 and this format specify numeric representations of time zone offsets.
21.4.1.15.1 Expanded Years
Date.parse
Examples of datetime values with expanded years:
2718210420T00:00:00Z  271822 B.C. 
0000010101T00:00:00Z  2 B.C. 
+0000000101T00:00:00Z  1 B.C. 
+0000010101T00:00:00Z  1 A.D. 
+0019700101T00:00:00Z  1970 A.D. 
+0020091215T00:00:00Z  2009 A.D. 
+2757600913T00:00:00Z  275760 A.D. 
21.4.2 The Date Constructor
The Date
 is %Date%.
 is the initial value of the
"Date" property of theglobal object .  creates and initializes a new Date object when called as a
constructor .  returns a String representing the current time (UTC) when called as a function rather than as a
constructor .  is a function whose behaviour differs based upon the number and types of its arguments.
 is designed to be subclassable. It may be used as the value of an
extends
clause of a class definition. Subclass constructors that intend to inherit the specified Date behaviour must include asuper
call to the Dateconstructor to create and initialize the subclass instance with a [[DateValue]] internal slot.  has a
"length" property whose value is7 _{𝔽}.
21.4.2.1 Date ( ...values )
When the Date
function is called, the following steps are taken:
 If NewTarget is
undefined , then Let now be the
time value (UTC) identifying the current time.  Return
ToDateString (now).
 Let now be the
 Let numberOfArgs be the number of elements in values.
 If numberOfArgs = 0, then
 Let dv be the
time value (UTC) identifying the current time.
 Let dv be the
 Else if numberOfArgs = 1, then
 Let value be values[0].
 If
Type (value) is Object and value has a [[DateValue]] internal slot, then Let tv be !
thisTimeValue (value).
 Let tv be !
 Else,
 Let v be ?
ToPrimitive (value).  If
Type (v) is String, thenAssert : The next step never returns anabrupt completion becauseType (v) is String. Let tv be the result of parsing v as a date, in exactly the same manner as for the
parse
method (21.4.3.2 ).
 Else,
 Let tv be ?
ToNumber (v).
 Let tv be ?
 Let v be ?
 Let dv be
TimeClip (tv).
 Else,
Assert : numberOfArgs ≥ 2. Let y be ?
ToNumber (values[0]).  Let m be ?
ToNumber (values[1]).  If numberOfArgs > 2, let dt be ?
ToNumber (values[2]); else let dt be1 _{𝔽}.  If numberOfArgs > 3, let h be ?
ToNumber (values[3]); else let h be+0 _{𝔽}.  If numberOfArgs > 4, let min be ?
ToNumber (values[4]); else let min be+0 _{𝔽}.  If numberOfArgs > 5, let s be ?
ToNumber (values[5]); else let s be+0 _{𝔽}.  If numberOfArgs > 6, let milli be ?
ToNumber (values[6]); else let milli be+0 _{𝔽}.  If y is
NaN , let yr beNaN .  Else,
 Let yi be !
ToIntegerOrInfinity (y).  If 0 ≤ yi ≤ 99, let yr be
1900 _{𝔽} +𝔽 (yi); otherwise, let yr be y.
 Let yi be !
 Let finalDate be
MakeDate (MakeDay (yr, m, dt),MakeTime (h, min, s, milli)).  Let dv be
TimeClip (UTC (finalDate)).
 Let O be ?
OrdinaryCreateFromConstructor (NewTarget,"%Date.prototype%" , « [[DateValue]] »).  Set O.[[DateValue]] to dv.
 Return O.
21.4.3 Properties of the Date Constructor
The Date
 has a [[Prototype]] internal slot whose value is
%Function.prototype% .  has the following properties:
21.4.3.1 Date.now ( )
The now
function returns the now
.
21.4.3.2 Date.parse ( string )
The parse
function applies the parse
interprets the resulting String as a date and time; it returns a Number, the UTC Date.parse
to return
If the String conforms to the MM
or DD
elements are absent, HH
, mm
, or ss
elements are absent, sss
element is absent,
If x
is any Date object whose milliseconds amount is zero within a particular implementation of ECMAScript, then all of the following expressions should produce the same numeric value in that implementation, if all the properties referenced have their initial values:
x.valueOf()
Date.parse(x.toString())
Date.parse(x.toUTCString())
Date.parse(x.toISOString())
However, the expression
Date.parse(x.toLocaleString())
is not required to produce the same Date.parse
is toString
or toUTCString
method.
21.4.3.3 Date.prototype
The initial value of Date.prototype
is the
This property has the attributes { [[Writable]]:
21.4.3.4 Date.UTC ( year [ , month [ , date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] ] )
When the UTC
function is called, the following steps are taken:
 Let y be ?
ToNumber (year).  If month is present, let m be ?
ToNumber (month); else let m be+0 _{𝔽}.  If date is present, let dt be ?
ToNumber (date); else let dt be1 _{𝔽}.  If hours is present, let h be ?
ToNumber (hours); else let h be+0 _{𝔽}.  If minutes is present, let min be ?
ToNumber (minutes); else let min be+0 _{𝔽}.  If seconds is present, let s be ?
ToNumber (seconds); else let s be+0 _{𝔽}.  If ms is present, let milli be ?
ToNumber (ms); else let milli be+0 _{𝔽}.  If y is
NaN , let yr beNaN .  Else,
 Let yi be !
ToIntegerOrInfinity (y).  If 0 ≤ yi ≤ 99, let yr be
1900 _{𝔽} +𝔽 (yi); otherwise, let yr be y.
 Let yi be !
 Return
TimeClip (MakeDate (MakeDay (yr, m, dt),MakeTime (h, min, s, milli))).
The UTC
function is
The UTC
function differs from the Date
21.4.4 Properties of the Date Prototype Object
The Date prototype object:
 is %Date.prototype%.
 is itself an
ordinary object .  is not a Date instance and does not have a [[DateValue]] internal slot.
 has a [[Prototype]] internal slot whose value is
%Object.prototype% .
Unless explicitly defined otherwise, the methods of the Date prototype object defined below are not generic and the
The abstract operation thisTimeValue takes argument value. It performs the following steps when called:
 If
Type (value) is Object and value has a [[DateValue]] internal slot, then Return value.[[DateValue]].
 Throw a
TypeError exception.
In following descriptions of functions that are properties of the Date prototype object, the phrase “this Date object” refers to the object that is the
21.4.4.1 Date.prototype.constructor
The initial value of Date.prototype.constructor
is
21.4.4.2 Date.prototype.getDate ( )
The following steps are performed:
 Let t be ?
thisTimeValue (this value).  If t is
NaN , returnNaN .  Return
DateFromTime (LocalTime (t)).
21.4.4.3 Date.prototype.getDay ( )
The following steps are performed:
 Let t be ?
thisTimeValue (this value).  If t is
NaN , returnNaN .  Return
WeekDay (LocalTime (t)).
21.4.4.4 Date.prototype.getFullYear ( )
The following steps are performed:
 Let t be ?
thisTimeValue (this value).  If t is
NaN , returnNaN .  Return
YearFromTime (LocalTime (t)).
21.4.4.5 Date.prototype.getHours ( )
The following steps are performed:
 Let t be ?
thisTimeValue (this value).  If t is
NaN , returnNaN .  Return
HourFromTime (LocalTime (t)).
21.4.4.6 Date.prototype.getMilliseconds ( )
The following steps are performed:
 Let t be ?
thisTimeValue (this value).  If t is
NaN , returnNaN .  Return
msFromTime (LocalTime (t)).
21.4.4.7 Date.prototype.getMinutes ( )
The following steps are performed:
 Let t be ?
thisTimeValue (this value).  If t is
NaN , returnNaN .  Return
MinFromTime (LocalTime (t)).
21.4.4.8 Date.prototype.getMonth ( )
The following steps are performed:
 Let t be ?
thisTimeValue (this value).  If t is
NaN , returnNaN .  Return
MonthFromTime (LocalTime (t)).
21.4.4.9 Date.prototype.getSeconds ( )
The following steps are performed:
 Let t be ?
thisTimeValue (this value).  If t is
NaN , returnNaN .  Return
SecFromTime (LocalTime (t)).
21.4.4.10 Date.prototype.getTime ( )
The following steps are performed:
 Return ?
thisTimeValue (this value).
21.4.4.11 Date.prototype.getTimezoneOffset ( )
The following steps are performed:
 Let t be ?
thisTimeValue (this value).  If t is
NaN , returnNaN .  Return (t 
LocalTime (t)) /msPerMinute .
21.4.4.12 Date.prototype.getUTCDate ( )
The following steps are performed:
 Let t be ?
thisTimeValue (this value).  If t is
NaN , returnNaN .  Return
DateFromTime (t).
21.4.4.13 Date.prototype.getUTCDay ( )
The following steps are performed:
 Let t be ?
thisTimeValue (this value).  If t is
NaN , returnNaN .  Return
WeekDay (t).
21.4.4.14 Date.prototype.getUTCFullYear ( )
The following steps are performed:
 Let t be ?
thisTimeValue (this value).  If t is
NaN , returnNaN .  Return
YearFromTime (t).
21.4.4.15 Date.prototype.getUTCHours ( )
The following steps are performed:
 Let t be ?
thisTimeValue (this value).  If t is
NaN , returnNaN .  Return
HourFromTime (t).
21.4.4.16 Date.prototype.getUTCMilliseconds ( )
The following steps are performed:
 Let t be ?
thisTimeValue (this value).  If t is
NaN , returnNaN .  Return
msFromTime (t).
21.4.4.17 Date.prototype.getUTCMinutes ( )
The following steps are performed:
 Let t be ?
thisTimeValue (this value).  If t is
NaN , returnNaN .  Return
MinFromTime (t).
21.4.4.18 Date.prototype.getUTCMonth ( )
The following steps are performed:
 Let t be ?
thisTimeValue (this value).  If t is
NaN , returnNaN .  Return
MonthFromTime (t).
21.4.4.19 Date.prototype.getUTCSeconds ( )
The following steps are performed:
 Let t be ?
thisTimeValue (this value).  If t is
NaN , returnNaN .  Return
SecFromTime (t).
21.4.4.20 Date.prototype.setDate ( date )
The following steps are performed:
 Let t be
LocalTime (?thisTimeValue (this value)).  Let dt be ?
ToNumber (date).  Let newDate be
MakeDate (MakeDay (YearFromTime (t),MonthFromTime (t), dt),TimeWithinDay (t)).  Let u be
TimeClip (UTC (newDate)).  Set the [[DateValue]] internal slot of
this Date object to u.  Return u.
21.4.4.21 Date.prototype.setFullYear ( year [ , month [ , date ] ] )
The following steps are performed:
 Let t be ?
thisTimeValue (this value).  If t is
NaN , set t to+0 _{𝔽}; otherwise, set t toLocalTime (t).  Let y be ?
ToNumber (year).  If month is not present, let m be
MonthFromTime (t); otherwise, let m be ?ToNumber (month).  If date is not present, let dt be
DateFromTime (t); otherwise, let dt be ?ToNumber (date).  Let newDate be
MakeDate (MakeDay (y, m, dt),TimeWithinDay (t)).  Let u be
TimeClip (UTC (newDate)).  Set the [[DateValue]] internal slot of
this Date object to u.  Return u.
The setFullYear
method is
If month is not present, this method behaves as if month was present with the value getMonth()
. If date is not present, it behaves as if date was present with the value getDate()
.
21.4.4.22 Date.prototype.setHours ( hour [ , min [ , sec [ , ms ] ] ] )
The following steps are performed:
 Let t be
LocalTime (?thisTimeValue (this value)).  Let h be ?
ToNumber (hour).  If min is not present, let m be
MinFromTime (t); otherwise, let m be ?ToNumber (min).  If sec is not present, let s be
SecFromTime (t); otherwise, let s be ?ToNumber (sec).  If ms is not present, let milli be
msFromTime (t); otherwise, let milli be ?ToNumber (ms).  Let date be
MakeDate (Day (t),MakeTime (h, m, s, milli)).  Let u be
TimeClip (UTC (date)).  Set the [[DateValue]] internal slot of
this Date object to u.  Return u.
The setHours
method is
If min is not present, this method behaves as if min was present with the value getMinutes()
. If sec is not present, it behaves as if sec was present with the value getSeconds()
. If ms is not present, it behaves as if ms was present with the value getMilliseconds()
.
21.4.4.23 Date.prototype.setMilliseconds ( ms )
The following steps are performed:
 Let t be
LocalTime (?thisTimeValue (this value)).  Set ms to ?
ToNumber (ms).  Let time be
MakeTime (HourFromTime (t),MinFromTime (t),SecFromTime (t), ms).  Let u be
TimeClip (UTC (MakeDate (Day (t), time))).  Set the [[DateValue]] internal slot of
this Date object to u.  Return u.
21.4.4.24 Date.prototype.setMinutes ( min [ , sec [ , ms ] ] )
The following steps are performed:
 Let t be
LocalTime (?thisTimeValue (this value)).  Let m be ?
ToNumber (min).  If sec is not present, let s be
SecFromTime (t); otherwise, let s be ?ToNumber (sec).  If ms is not present, let milli be
msFromTime (t); otherwise, let milli be ?ToNumber (ms).  Let date be
MakeDate (Day (t),MakeTime (HourFromTime (t), m, s, milli)).  Let u be
TimeClip (UTC (date)).  Set the [[DateValue]] internal slot of
this Date object to u.  Return u.
The setMinutes
method is
If sec is not present, this method behaves as if sec was present with the value getSeconds()
. If ms is not present, this behaves as if ms was present with the value getMilliseconds()
.
21.4.4.25 Date.prototype.setMonth ( month [ , date ] )
The following steps are performed:
 Let t be
LocalTime (?thisTimeValue (this value)).  Let m be ?
ToNumber (month).  If date is not present, let dt be
DateFromTime (t); otherwise, let dt be ?ToNumber (date).  Let newDate be
MakeDate (MakeDay (YearFromTime (t), m, dt),TimeWithinDay (t)).  Let u be
TimeClip (UTC (newDate)).  Set the [[DateValue]] internal slot of
this Date object to u.  Return u.
The setMonth
method is
If date is not present, this method behaves as if date was present with the value getDate()
.
21.4.4.26 Date.prototype.setSeconds ( sec [ , ms ] )
The following steps are performed:
 Let t be
LocalTime (?thisTimeValue (this value)).  Let s be ?
ToNumber (sec).  If ms is not present, let milli be
msFromTime (t); otherwise, let milli be ?ToNumber (ms).  Let date be
MakeDate (Day (t),MakeTime (HourFromTime (t),MinFromTime (t), s, milli)).  Let u be
TimeClip (UTC (date)).  Set the [[DateValue]] internal slot of
this Date object to u.  Return u.
The setSeconds
method is
If ms is not present, this method behaves as if ms was present with the value getMilliseconds()
.
21.4.4.27 Date.prototype.setTime ( time )
The following steps are performed:
 Perform ?
thisTimeValue (this value).  Let t be ?
ToNumber (time).  Let v be
TimeClip (t).  Set the [[DateValue]] internal slot of
this Date object to v.  Return v.
21.4.4.28 Date.prototype.setUTCDate ( date )
The following steps are performed:
 Let t be ?
thisTimeValue (this value).  Let dt be ?
ToNumber (date).  Let newDate be
MakeDate (MakeDay (YearFromTime (t),MonthFromTime (t), dt),TimeWithinDay (t)).  Let v be
TimeClip (newDate).  Set the [[DateValue]] internal slot of
this Date object to v.  Return v.
21.4.4.29 Date.prototype.setUTCFullYear ( year [ , month [ , date ] ] )
The following steps are performed:
 Let t be ?
thisTimeValue (this value).  If t is
NaN , set t to+0 _{𝔽}.  Let y be ?
ToNumber (year).  If month is not present, let m be
MonthFromTime (t); otherwise, let m be ?ToNumber (month).  If date is not present, let dt be
DateFromTime (t); otherwise, let dt be ?ToNumber (date).  Let newDate be
MakeDate (MakeDay (y, m, dt),TimeWithinDay (t)).  Let v be
TimeClip (newDate).  Set the [[DateValue]] internal slot of
this Date object to v.  Return v.
The setUTCFullYear
method is
If month is not present, this method behaves as if month was present with the value getUTCMonth()
. If date is not present, it behaves as if date was present with the value getUTCDate()
.
21.4.4.30 Date.prototype.setUTCHours ( hour [ , min [ , sec [ , ms ] ] ] )
The following steps are performed:
 Let t be ?
thisTimeValue (this value).  Let h be ?
ToNumber (hour).  If min is not present, let m be
MinFromTime (t); otherwise, let m be ?ToNumber (min).  If sec is not present, let s be
SecFromTime (t); otherwise, let s be ?ToNumber (sec).  If ms is not present, let milli be
msFromTime (t); otherwise, let milli be ?ToNumber (ms).  Let newDate be
MakeDate (Day (t),MakeTime (h, m, s, milli)).  Let v be
TimeClip (newDate).  Set the [[DateValue]] internal slot of
this Date object to v.  Return v.
The setUTCHours
method is
If min is not present, this method behaves as if min was present with the value getUTCMinutes()
. If sec is not present, it behaves as if sec was present with the value getUTCSeconds()
. If ms is not present, it behaves as if ms was present with the value getUTCMilliseconds()
.
21.4.4.31 Date.prototype.setUTCMilliseconds ( ms )
The following steps are performed:
 Let t be ?
thisTimeValue (this value).  Let milli be ?
ToNumber (ms).  Let time be
MakeTime (HourFromTime (t),MinFromTime (t),SecFromTime (t), milli).  Let v be
TimeClip (MakeDate (Day (t), time)).  Set the [[DateValue]] internal slot of
this Date object to v.  Return v.
21.4.4.32 Date.prototype.setUTCMinutes ( min [ , sec [ , ms ] ] )
The following steps are performed:
 Let t be ?
thisTimeValue (this value).  Let m be ?
ToNumber (min).  If sec is not present, let s be
SecFromTime (t).  Else,
 Let s be ?
ToNumber (sec).
 Let s be ?
 If ms is not present, let milli be
msFromTime (t).  Else,
 Let milli be ?
ToNumber (ms).
 Let milli be ?
 Let date be
MakeDate (Day (t),MakeTime (HourFromTime (t), m, s, milli)).  Let v be
TimeClip (date).  Set the [[DateValue]] internal slot of
this Date object to v.  Return v.
The setUTCMinutes
method is
If sec is not present, this method behaves as if sec was present with the value getUTCSeconds()
. If ms is not present, it function behaves as if ms was present with the value return by getUTCMilliseconds()
.
21.4.4.33 Date.prototype.setUTCMonth ( month [ , date ] )
The following steps are performed:
 Let t be ?
thisTimeValue (this value).  Let m be ?
ToNumber (month).  If date is not present, let dt be
DateFromTime (t).  Else,
 Let dt be ?
ToNumber (date).
 Let dt be ?
 Let newDate be
MakeDate (MakeDay (YearFromTime (t), m, dt),TimeWithinDay (t)).  Let v be
TimeClip (newDate).  Set the [[DateValue]] internal slot of
this Date object to v.  Return v.
The setUTCMonth
method is
If date is not present, this method behaves as if date was present with the value getUTCDate()
.
21.4.4.34 Date.prototype.setUTCSeconds ( sec [ , ms ] )
The following steps are performed:
 Let t be ?
thisTimeValue (this value).  Let s be ?
ToNumber (sec).  If ms is not present, let milli be
msFromTime (t).  Else,
 Let milli be ?
ToNumber (ms).
 Let milli be ?
 Let date be
MakeDate (Day (t),MakeTime (HourFromTime (t),MinFromTime (t), s, milli)).  Let v be
TimeClip (date).  Set the [[DateValue]] internal slot of
this Date object to v.  Return v.
The setUTCSeconds
method is
If ms is not present, this method behaves as if ms was present with the value getUTCMilliseconds()
.
21.4.4.35 Date.prototype.toDateString ( )
The following steps are performed:
 Let O be
this Date object .  Let tv be ?
thisTimeValue (O).  If tv is
NaN , return"Invalid Date" .  Let t be
LocalTime (tv).  Return
DateString (t).
21.4.4.36 Date.prototype.toISOString ( )
If
21.4.4.37 Date.prototype.toJSON ( key )
This function provides a String representation of a Date object for use by JSON.stringify
(
When the toJSON
method is called with argument key, the following steps are taken:
 Let O be ?
ToObject (this value).  Let tv be ?
ToPrimitive (O,number ).  If
Type (tv) is Number and tv is not finite, returnnull .  Return ?
Invoke (O,"toISOString" ).
The argument is ignored.
The toJSON
function is intentionally generic; it does not require that its toISOString
method.
21.4.4.38 Date.prototype.toLocaleDateString ( [ reserved1 [ , reserved2 ] ] )
An ECMAScript implementation that includes the ECMA402 Internationalization API must implement the Date.prototype.toLocaleDateString
method as specified in the ECMA402 specification. If an ECMAScript implementation does not include the ECMA402 API the following specification of the toLocaleDateString
method is used.
This function returns a String value. The contents of the String are
The meaning of the optional parameters to this method are defined in the ECMA402 specification; implementations that do not include ECMA402 support must not use those parameter positions for anything else.
21.4.4.39 Date.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
An ECMAScript implementation that includes the ECMA402 Internationalization API must implement the Date.prototype.toLocaleString
method as specified in the ECMA402 specification. If an ECMAScript implementation does not include the ECMA402 API the following specification of the toLocaleString
method is used.
This function returns a String value. The contents of the String are
The meaning of the optional parameters to this method are defined in the ECMA402 specification; implementations that do not include ECMA402 support must not use those parameter positions for anything else.
21.4.4.40 Date.prototype.toLocaleTimeString ( [ reserved1 [ , reserved2 ] ] )
An ECMAScript implementation that includes the ECMA402 Internationalization API must implement the Date.prototype.toLocaleTimeString
method as specified in the ECMA402 specification. If an ECMAScript implementation does not include the ECMA402 API the following specification of the toLocaleTimeString
method is used.
This function returns a String value. The contents of the String are
The meaning of the optional parameters to this method are defined in the ECMA402 specification; implementations that do not include ECMA402 support must not use those parameter positions for anything else.
21.4.4.41 Date.prototype.toString ( )
The following steps are performed:
 Let tv be ?
thisTimeValue (this value).  Return
ToDateString (tv).
For any Date object d
such that d.[[DateValue]]
is evenly divisible by 1000, the result of Date.parse(d.toString())
= d.valueOf()
. See
The toString
function is not generic; it throws a
21.4.4.41.1 TimeString ( tv )
The abstract operation TimeString takes argument tv. It performs the following steps when called:
Assert :Type (tv) is Number.Assert : tv is notNaN . Let hour be the String representation of
HourFromTime (tv), formatted as a twodigit decimal number, padded to the left with the code unit 0x0030 (DIGIT ZERO) if necessary.  Let minute be the String representation of
MinFromTime (tv), formatted as a twodigit decimal number, padded to the left with the code unit 0x0030 (DIGIT ZERO) if necessary.  Let second be the String representation of
SecFromTime (tv), formatted as a twodigit decimal number, padded to the left with the code unit 0x0030 (DIGIT ZERO) if necessary.  Return the
stringconcatenation of hour,":" , minute,":" , second, the code unit 0x0020 (SPACE), and"GMT" .
21.4.4.41.2 DateString ( tv )
The abstract operation DateString takes argument tv. It performs the following steps when called:
Assert :Type (tv) is Number.Assert : tv is notNaN . Let weekday be the Name of the entry in
Table 52 with the NumberWeekDay (tv).  Let month be the Name of the entry in
Table 53 with the NumberMonthFromTime (tv).  Let day be the String representation of
DateFromTime (tv), formatted as a twodigit decimal number, padded to the left with the code unit 0x0030 (DIGIT ZERO) if necessary.  Let yv be
YearFromTime (tv).  If yv ≥
+0 _{𝔽}, let yearSign be the empty String; otherwise, let yearSign be"" .  Let year be the String representation of
abs (ℝ (yv)), formatted as a decimal number.  Let paddedYear be !
StringPad (year,4 _{𝔽},"0" ,start ).  Return the
stringconcatenation of weekday, the code unit 0x0020 (SPACE), month, the code unit 0x0020 (SPACE), day, the code unit 0x0020 (SPACE), yearSign, and paddedYear.
Number  Name 















Number  Name 

























21.4.4.41.3 TimeZoneString ( tv )
The abstract operation TimeZoneString takes argument tv. It performs the following steps when called:
Assert :Type (tv) is Number.Assert : tv is notNaN . Let offset be
LocalTZA (tv,true ).  If offset ≥
+0 _{𝔽}, then Let offsetSign be
"+" .  Let absOffset be offset.
 Let offsetSign be
 Else,
 Let offsetSign be
"" .  Let absOffset be offset.
 Let offsetSign be
 Let offsetMin be the String representation of
MinFromTime (absOffset), formatted as a twodigit decimal number, padded to the left with the code unit 0x0030 (DIGIT ZERO) if necessary.  Let offsetHour be the String representation of
HourFromTime (absOffset), formatted as a twodigit decimal number, padded to the left with the code unit 0x0030 (DIGIT ZERO) if necessary.  Let tzName be an
implementationdefined string that is either the empty String or thestringconcatenation of the code unit 0x0020 (SPACE), the code unit 0x0028 (LEFT PARENTHESIS), animplementationdefined timezone name, and the code unit 0x0029 (RIGHT PARENTHESIS).  Return the
stringconcatenation of offsetSign, offsetHour, offsetMin, and tzName.
21.4.4.41.4 ToDateString ( tv )
The abstract operation ToDateString takes argument tv. It performs the following steps when called:
Assert :Type (tv) is Number. If tv is
NaN , return"Invalid Date" .  Let t be
LocalTime (tv).  Return the
stringconcatenation ofDateString (t), the code unit 0x0020 (SPACE),TimeString (t), andTimeZoneString (tv).
21.4.4.42 Date.prototype.toTimeString ( )
The following steps are performed:
 Let O be
this Date object .  Let tv be ?
thisTimeValue (O).  If tv is
NaN , return"Invalid Date" .  Let t be
LocalTime (tv).  Return the
stringconcatenation ofTimeString (t) andTimeZoneString (tv).
21.4.4.43 Date.prototype.toUTCString ( )
The toUTCString
method returns a String value representing the instance in time corresponding to
 Let O be
this Date object .  Let tv be ?
thisTimeValue (O).  If tv is
NaN , return"Invalid Date" .  Let weekday be the Name of the entry in
Table 52 with the NumberWeekDay (tv).  Let month be the Name of the entry in
Table 53 with the NumberMonthFromTime (tv).  Let day be the String representation of
DateFromTime (tv), formatted as a twodigit decimal number, padded to the left with the code unit 0x0030 (DIGIT ZERO) if necessary.  Let yv be
YearFromTime (tv).  If yv ≥
+0 _{𝔽}, let yearSign be the empty String; otherwise, let yearSign be"" .  Let year be the String representation of
abs (ℝ (yv)), formatted as a decimal number.  Let paddedYear be !
StringPad (year,4 _{𝔽},"0" ,start ).  Return the
stringconcatenation of weekday,"," , the code unit 0x0020 (SPACE), day, the code unit 0x0020 (SPACE), month, the code unit 0x0020 (SPACE), yearSign, paddedYear, the code unit 0x0020 (SPACE), andTimeString (tv).
21.4.4.44 Date.prototype.valueOf ( )
The following steps are performed:
 Return ?
thisTimeValue (this value).
21.4.4.45 Date.prototype [ @@toPrimitive ] ( hint )
This function is called by ECMAScript language operators to convert a Date object to a primitive value. The allowed values for hint are
When the @@toPrimitive
method is called with argument hint, the following steps are taken:
 Let O be the
this value.  If
Type (O) is not Object, throw aTypeError exception.  If hint is
"string" or"default" , then Let tryFirst be
string .
 Let tryFirst be
 Else if hint is
"number" , then Let tryFirst be
number .
 Let tryFirst be
 Else, throw a
TypeError exception.  Return ?
OrdinaryToPrimitive (O, tryFirst).
The value of the
This property has the attributes { [[Writable]]:
21.4.5 Properties of Date Instances
Date instances are ordinary objects that inherit properties from the