Перечисленные ниже функции являются абстрактными операторами, оперирующими значениями времени (определение которым приводится в пункте 15.9.1.1). Обратите внимание, что, для каждой из этих функций, если какой-либо из её аргументов является NaN, то и результат будет NaN.
Объект типа Date содержит число, означающее конкретный момент времени с точностью до миллисекунды. Это число называется значением времени time value. Значение времени может быть NaN, и в этом случае объект Date не представляет собой какого-либо конкретного момента времени.
В ECMAScript время измеряется в миллисекундах с 01 января 1970г. по всемирному координированному времени (UTC). Корректировочные секунды, или секунды координации всемирного времени игнорируются. Предполагается, что каждый день содержит ровно 86 400 000 миллисекунд. Числовые значения в языке ECMAScript могут представить все целые числа от –9 007 199 254 740 991 до 9 007 199 254 740 991. Этого диапазона достаточно для измерения с точностью до миллисекунды любого момента времени в пределах приблизительно до 285 616 лет назад или вперёд с даты 01 января 1970г. по UTC.
Фактический диапазон времени, поддерживаемый объектами Date в языке ECMAScript, немного меньше: ровно от –100 000 000 до 100 000 000 дней, измеряемых относительно полуночи, с которой начинается 01 января 1970г. по UTC. Это равно 8 640 000 000 000 000 миллисекундам в обоих направлениях от 01 января 1970г. по UTC.
Точный момент полуночи, с которого начинается 01 января 1970г. по UTC, представлен значением +0.
Заданное значение времени t означает номер дня
где количество миллисекунд в день равно
msPerDay = 86400000
Остаток называется временем дня:
TimeWithinDay(t) = t modulo msPerDay
В языке ECMAScript используется экстраполированный григорианский календарь для приведения номера дня к номеру года и определения месяца и даты в этом году. В соответствии с этим календарём, високосный год – это год, который (кратен 4) и ((не кратен 100) или (кратен 400)). Таким образом, количество дней в году y определяется следующим представлением:
DaysInYear(y) = 365 если (y modulo 4) ≠ 0
= 366 если (y modulo 4) = 0 и (y modulo 100) ≠ 0
= 365 если (y modulo 100) = 0 и (y modulo 400) ≠ 0
= 366 если (y modulo 400) = 0
Все невисокосные годы имеют 365 дней с обычным количеством дней в месяц, а високосные годы имеют дополнительный день в феврале. Номер дня первого дня года y получается следующим образом:
DayFromYear(y) = 365 × (y−1970) + floor((y−1969)/4) − floor((y−1901)/100) + floor((y−1601)/400)
Значение времени на начало года получается следующим образом:
TimeFromYear(y) = msPerDay × DayFromYear(y)
Значение времени определяет год следующим образом:
YearFromTime(t) = такое наибольшее целое число y (ближайшее к положительной бесконечности), чтобы TimeFromYear(y) ≤ t
Если время имеет место в течение високосного года, то функция високосного года производит 1, в противном случае – ноль:
InLeapYear(t) = 0 если DaysInYear(YearFromTime(t)) = 365
= 1 если DaysInYear(YearFromTime(t)) = 366
Для обозначения месяцев используется целое число от 0 до 11 включительно. MonthFromTime(t) – преобразование значения времени t в номер месяца – производится следующим образом:
MonthFromTime(t) = 0 если 0 ≤ DayWithinYear(t) < 31
= 1 если 31 ≤ DayWithinYear (t) < 59+InLeapYear(t)
= 2 если 59+InLeapYear(t) ≤ DayWithinYear (t) < 90+InLeapYear(t)
= 3 если 90+InLeapYear(t) ≤ DayWithinYear (t) < 120+InLeapYear(t)
= 4 если 120+InLeapYear(t) ≤ DayWithinYear (t) < 151+InLeapYear(t)
= 5 если 151+InLeapYear(t) ≤ DayWithinYear (t) < 181+InLeapYear(t)
= 6 если 181+InLeapYear(t) ≤ DayWithinYear (t) < 212+InLeapYear(t)
= 7 если 212+InLeapYear(t) ≤ DayWithinYear (t) < 243+InLeapYear(t)
= 8 если 243+InLeapYear(t) ≤ DayWithinYear (t) < 273+InLeapYear(t)
= 9 если 273+InLeapYear(t) ≤ DayWithinYear (t) < 304+InLeapYear(t)
= 10 если 304+InLeapYear(t) ≤ DayWithinYear (t) < 334+InLeapYear(t)
= 11 если 334+InLeapYear(t) ≤ DayWithinYear (t) < 365+InLeapYear(t)
где
DayWithinYear(t) = Day(t)−DayFromYear(YearFromTime(t))
Значение месяца 0 означает январь; 1 означает февраль; 2 – март; 3 – апрель; 4 – май; 5 – июнь; 6 – июль; 7 – август; 8 – сентябрь; 9 – октябрь; 10 – ноябрь; 11 – декабрь. Обратите внимание, что MonthFromTime(0) = 0, что соответствует вторнику, 01 января, 1970г.
Для обозначения даты используется целое число от 1 до 31 включительно. DateFromTime(t) – преобразование значения времени t в номер месяца – производится следующим образом:
DateFromTime(t) = DayWithinYear(t)+1 если MonthFromTime(t)=0
= DayWithinYear(t)−30 если MonthFromTime(t)=1
= DayWithinYear(t)−58−InLeapYear(t) если MonthFromTime(t)=2
= DayWithinYear(t)−89−InLeapYear(t) если MonthFromTime(t)=3
= DayWithinYear(t)−119−InLeapYear(t) если MonthFromTime(t)=4
= DayWithinYear(t)−150−InLeapYear(t) если MonthFromTime(t)=5
= DayWithinYear(t)−180−InLeapYear(t) если MonthFromTime(t)=6
= DayWithinYear(t)−211−InLeapYear(t) если MonthFromTime(t)=7
= DayWithinYear(t)−242−InLeapYear(t) еслиMonthFromTime(t)=8
= DayWithinYear(t)−272−InLeapYear(t) если MonthFromTime(t)=9
= DayWithinYear(t)−303−InLeapYear(t) если MonthFromTime(t)=10
= DayWithinYear(t)−333−InLeapYear(t) если MonthFromTime(t)=11
День недели для конкретного значения времени t определяется следующим образом:
WeekDay(t) = (Day(t) + 4) modulo 7
Значение дня недели 0 означает воскресенье; 1 – понедельник; 2 – вторник; 3 – среду; 4 – четверг; 5 – пятницу; 6 – субботу. Обратите внимание, что WeekDay(0) = 4, что соответствует вторнику, 01 января, 1970г.
Реализация ECMAScript должна определять поправку на местное время. Поправка на местное время представляет собой значение LocalTZA, измеряемое в миллисекундах, которые при добавлении к времени UTC представляют стандартное местное время. Значение LocalTZA не отражает переход на летнее время. Значение LocalTZA не изменяется со временем, а зависит исключительно от географического местоположения.
Реализация ECMAScript должна определять алгоритм перехода на летнее время. Алгоритм для определения поправки на летнее время DaylightSavingTA(t), измеряемый в миллисекундах, должен зависеть только от четырёх моментов:
(1) времени с начала года
t – TimeFromYear(YearFromTime(t))
(2) приходится ли время t на високосный год
InLeapYear(t)
(3) дня недели, на который выпадает начало года
WeekDay(TimeFromYear(YearFromTime(t))
и (4) географического местоположения.
Реализация ECMAScript не должна пытаться определить, подвергалось ли фактическое время переходу на летнее время. Она должна только определять, действовало бы летнее время, если бы в тот момент применить текущий алгоритм определения поправки на летнее время. Это позволит избежать таких осложнений, как учёт лет, когда в конкретной местности летнее время использовалось круглый год.
Если внешняя среда обеспечивает функциональные возможности для определения летнего времени, то реализация на ECMAScript может сопоставить заданный год с эквивалентным годом (аналогичной високосности и с таким же днём недели, выпадающим на начало года), для которого внешняя среда предоставляет информацию о летнем времени. Единственное ограничение заключается в том, что все эквивалентные годы должны производить один и тот же результат.
Преобразование из времени по UTC в местное время определяется следующим образом:
LocalTime(t) = t + LocalTZA + DaylightSavingTA(t)
Преобразование из местного времени в формат времени по UTC определяется следующим образом:
UTC(t) = t – LocalTZA – DaylightSavingTA(t – LocalTZA)
Обратите внимание, что UTC(LocalTime(t)) не обязательно всегда равно t.
Для разложения значений времени используются следующие функции:
HourFromTime(t) = floor(t / msPerHour) modulo HoursPerDay
MinFromTime(t) = floor(t / msPerMinute) modulo MinutesPerHour
SecFromTime(t) = floor(t / msPerSecond) modulo SecondsPerMinute
msFromTime(t) = t modulo msPerSecond
где
HoursPerDay часов в дне = 24
MinutesPerHour минут в часе = 60
SecondsPerMinute секунд в минуту = 60
msPerSecond миллисекунд в секунду = 1000
msPerMinute миллисекунд в минуту = 60000 = msPerSecond × SecondsPerMinute
msPerHour миллисекунд в час = 3600000 = msPerMinute × MinutesPerHour
Оператор MakeTime вычисляет количество миллисекунд, используя значения своих четырёх аргументов, которые должны быть числовыми значениями ECMAScript. Он действует следующим образом:
Если hour не является конечным числом или min не является конечным числом, или sec не является конечным числом, или ms не является конечным числом, вернуть NaN.
Пусть h будет ToInteger(hour).
Пусть m будет ToInteger(min).
Пусть s будет ToInteger(sec).
Пусть milli будет ToInteger(ms).
Пусть t будет h *
msPerHour +
m *
msPerMinute +
s *
msPerSecond +
milli, при этом арифметические действия выполняются в соответствии с правилами стандарта IEEE 754 (то есть, как если бы с использованием операторов ECMAScript *
и +
).
Вернуть t.
Оператор MakeDay вычисляет количество дней, используя значения своих трёх аргументов, которые должны быть числовыми значениями ECMAScript. Он действует следующим образом:
Если year не является конечным числом или month не является конечным числом, или date не является конечным числом, вернуть NaN.
Пусть y будет ToInteger(year).
Пусть m будет ToInteger(month).
Пусть dt будет ToInteger(date).
Пусть ym будет y + floor(m /12).
Пусть mn будет m modulo 12.
Найти такое значение t, чтобы YearFromTime(t) ==
ym и MonthFromTime(t) ==
mn) и DateFromTime(t) ==
1; но если это невозможно (из-за того, что один из аргументов находится вне допустимого диапазона), вернуть NaN.
Вернуть Day(t) + dt − 1.
Оператор MakeDate вычисляет количество миллисекунд, используя значения своих двух аргументов, которые должны быть числовыми значениями ECMAScript. Он действует следующим образом:
Если day не является конечным числом или time не является конечным числом, вернуть NaN.
Вернуть day × msPerDay + time.
Оператор TimeClip вычисляет количество миллисекунд, используя значение своего аргумента, которое должно быть числовым значением ECMAScript. Он действует следующим образом:
Если time не является конечным числом, вернуть NaN.
Если abs(time) > 8.64 x 1015, вернуть NaN.
Вернуть либо ToInteger(time), либо ToInteger(time) + (+0), выбор которых зависит от реализации. (При добавлении положительного нуля −0 преобразуется в +0).
ПРИМЕЧАНИЕ Смысл шага 3 заключается в том, что реализации разрешается выбирать из внутренних представлений значений времени, например – представление в виде знакового 64-битового целого, или в виде 64-битового значения с плавающей точкой. В зависимости от реализации, это внутреннее представление может различать между −0 и +0, или нет.
ECMAScript определяет строковый формат замены для даты-времени на основании упрощения Расширенного формата ISO 8601. Этот формат выглядит следующим образом: YYYY-MM-DDTHH:mm:ss.sss
Z
где поля имеют следующие значения:
YYYY | десятичные цифры, обозначающие год по григорианскому календарю. |
- | буквальное изображение “- ” (дефис) встречается в строке дважды. |
MM | месяц года с 01 (январь) по 12 (декабрь). |
DD | день месяца с 01 по 31. |
T | буквальное изображение “T ” встречается в строке, чтобы обозначить начало элемента, указывающего время. |
HH | количество полных часов, прошедших с полуночи, представленных в виде двух десятичных цифр. |
: | буквальное изображение “: ” (двоеточие) встречается в строке дважды. |
mm | количество полных минут, прошедших с начала часа, представленных в виде двух десятичных цифр. |
ss | количество полных секунд, прошедших с начала минуты, представленных в виде двух десятичных цифр. |
. | буквальное изображение “. ” (точка) встречается в строке. |
sss | количество полных миллисекунд, прошедших с начала секунды, представленных в виде трёх десятичных цифр. |
Z | смещение на часовой пояс, указанное в виде “Z ” (для UTC), либо в виде знака “+ ” или “- ”, после которого следует выражение hh:mm |
Этот формат включает в себя следующие формы представления "только дата":
YYYY
YYYY-MM
YYYY-MM-DD
Он также включает в себя формы "дата и время", состоящие из одной из вышеуказанных форм типа "только дата", за которой сразу же следует “T
”, а затем одна из нижеследующих форм представления времени, а за ней – необязательное значение смещения на часовой пояс:
THH:mm
THH:mm:ss
THH:mm:ss.sss
Все числа должны иметь основание 10. Если поле MM
или DD
отсутствует, в качестве значений используется “01
”. Если поле mm
или ss
отсутствует, в качестве значений используется “00
”, а если отсутствует поле sss
, в качестве его значения используется “000
”. Значение отсутствующего смещения на часовой пояс равно “Z
”.
Если в строке данного формата встречаются некорректные значения (то есть, выходящие за предписанные рамки, или содержащие синтаксические ошибки), это значит, что эта строка не является действительным экземпляром данного формата.
ПРИМЕЧАНИЕ 1 Поскольку и начало и конец каждого дня приходятся на полночь, существует два варианта записи – 00:00
и 24:00
, позволяющие различить две полуночи, относящиеся к одной и той же дате. Это значит, что две записи: 1995-02-04T24:00
и 1995-02-05T00:00
– обозначают совершенно одинаковый момент времени.
ПРИМЕЧАНИЕ 2 Нет международных стандартов, которые бы задавали аббревиатуры для гражданских часовых поясов, таких как CET (центральноевропейское время), EST (стандартное восточное время), и т.д., и даже иногда одна и та же аббревиатура используется для обозначения двух совершенно разных часовых поясов. Поэтому стандарт ISO 8601 и данный формат используют числовое представление даты и времени.
В языке ECMAScript необходимо иметь возможность указать 6-значное количество лет (увеличенное количество лет) – приблизительно на 285 616 лет вперёд или назад с даты 01 января 1970г. по UTC. Для представления лет до 0 года или после 9999 года стандарт ISO 8601 позволяет расширить формат представления лет, но только после предварительной договорённости между отправителем и получателем. В упрощённом формате ECMAScript такое представление получит 2 дополнительные цифры для обозначения года, и перед обозначением года обязательно будет присутствовать знак "+" или "–". Нулевой год ("0") считается положительным, поэтому перед ним используется знак "+".
При вызове Date
не в качестве конструктора, а в качестве функции, возвращается строка, представляющая собой текущее время (UTC).
ПРИМЕЧАНИЕ Вызов функции Date(
…
)
не эквивалентен выражению для создания объекта new Date(
…
)
с теми же аргументами.
Все аргументы являются необязательными. Все передаваемые аргументы принимаются, но полностью игнорируются. Создаётся и возвращается строка, как если бы она была создана выражением (new Date()).toString()
, где Date
является стандартным встроенным конструктором с этим именем, а toString
является стандартным встроенным методом Date.prototype.toString
.
Если Date
вызывается как часть выражения new
, он является конструктором, так как он инициализирует создаваемый объект.
При вызове конструктора Date с аргументами в количестве от двух до семи вычисляется дата, состоящая из year, month, и (необязательно) date, hours, minutes, seconds и ms.
Внутреннее свойство [[Prototype]] создаваемого объекта устанавливается равным исходному объекту-прототипу Date, который представляет собой начальное значение свойства Date.prototype
(15.9.4.1).
Внутреннее свойство [[Class]] создаваемого объекта устанавливается равным "Date"
.
Внутреннее свойство [[Extensible]] создаваемого объекта устанавливается равным true.
Внутреннее свойство [[PrimitiveValue]] создаваемого объекта устанавливается следующим образом:
Пусть y будет ToNumber(year).
Пусть m будет ToNumber(month).
Если date передаётся, пусть dt будет ToNumber(date); иначе пусть dt будет 1.
Если hours передаётся, пусть h будет ToNumber(hours); иначе пусть h будет 0.
Если minutes передаётся, пусть min будет ToNumber(minutes); иначе пусть min будет 0.
Если seconds передаётся, пусть s будет ToNumber(seconds); иначе пусть s будет 0.
Если ms передаётся, пусть milli будет ToNumber(ms); иначе пусть milli будет 0.
Если y не равно NaN, и 0 ≤ ToInteger(y) ≤ 99, то пусть yr будет 1900+ToInteger(y); иначе пусть yr будет y.
Пусть finalDate будет MakeDate(MakeDay(yr, m, dt), MakeTime(h, min, s, milli)).
Установить внутреннее свойство [[PrimitiveValue]] создаваемого объекта равным TimeClip(UTC(finalDate)).
Внутреннее свойство [[Prototype]] создаваемого объекта устанавливается равным исходному объекту-прототипу Date, который представляет собой начальное значение свойства Date.prototype
(15.9.4.1).
Внутреннее свойство [[Class]] создаваемого объекта устанавливается равным "Date"
.
Внутреннее свойство [[Extensible]] создаваемого объекта устанавливается равным true.
Внутреннее свойство [[PrimitiveValue]] создаваемого объекта устанавливается следующим образом:
Пусть v будет ToPrimitive(value).
Если Type(v) равно String, то
Сделать разбор v как даты, точно таким же образом, как для метода parse
(15.9.4.2); пусть V будет значением времени для этой даты.
Иначе, пусть V будет ToNumber(v).
Установить внутреннее свойство [[PrimitiveValue]] создаваемого объекта равным TimeClip(V) и вернуть.
Внутреннее свойство [[Prototype]] создаваемого объекта устанавливается равным исходному объекту-прототипу Date, который представляет собой начальное значение свойства Date.prototype
(15.9.4.1).
Внутреннее свойство [[Class]] создаваемого объекта устанавливается равным "Date"
.
Внутреннее свойство [[Extensible]] создаваемого объекта устанавливается равным true.
Внутреннее свойство [[PrimitiveValue]] создаваемого объекта устанавливается равным значению времени (UTC), обозначающему текущее время.
Значением внутреннего свойства [[Prototype]] конструктора Date является объект-прототип Function (15.3.4).
Кроме внутренних свойств и свойства length
со значением 7, конструктор Date имеет следующие свойства:
Начальным значением Date.prototype
является встроенный объект-прототип Date (15.9.5).
Это свойство имеет атрибуты { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }
Функция parse
применяет к своему аргументу оператор ToString и интерпретирует полученную строку как дату и время. Эта функция возвращает число – значение времени по UTC, соответствующее этой дате и времени. Строка может быть интерпретирована как местное время, как время по UTC, или как время в любом другом часовом поясе, в зависимости от содержимого строки. Сначала функция пытается разобрать формат строки в соответствии с правилами Строкового формата "дата и время" Date Time String Format, см. пункт 15.9.1.15. Если строка не соответствует этому формату, функция может применить эвристические правила более низкого уровня или формат даты более низкого уровня, обусловленные реализацией. Если строка не распознаётся, или если дата содержит некорректные значения в формате String, функция Date.parse
вернёт NaN.
Если x является объектом типа Date с количеством миллисекунд, равным нулю в конкретной реализации ECMAScript, то все нежеперечисленные выражения должны в этой реализации возвращать одинаковые числовые значения, если все упоминаемые свойства имеют первоначальные значения:
x
.valueOf()
Date.parse(
x
.toString())
Date.parse(
x
.toUTCString())
Date.parse(
x
.toISOString())
Однако, выражение
Date.parse(
x.toLocaleString())
не обязано возвращать такое же числовое значение, что и три предыдущие выражения, и, в целом, значение, возвращаемое функцией Date.parse
зависит от реализации, если функции передаётся строковое значение, не соответствующее Строковому формату "дата-время" (15.9.1.15), которое в этой реализации не может быть результатом метода toString
или toUTCString
.
При вызове функции UTC
менее чем с двумя аргументами ее поведение зависит от реализации. При вызове функции UTC
с аргументами в количестве от двух до семи вычисляется дата, состоящая из year, month, и (необязательно) date, hours, minutes, seconds и ms. Выполняются следующие шаги:
Пусть y будет ToNumber(year).
Пусть m будет ToNumber(month).
Если date передаётся, пусть dt будет ToNumber(date); иначе пусть dt будет 1.
Если hours передаётся, пусть h будет ToNumber(hours); иначе пусть h будет 0.
Если minutes передаётся, пусть min будет ToNumber(minutes); иначе пусть min будет 0.
Если seconds передаётся, пусть s будет ToNumber(seconds); иначе пусть s будет 0.
Если ms передаётся, пусть milli будет ToNumber(ms); иначе пусть milli будет 0.
Если y не равно NaN, и 0 ≤ ToInteger(y) ≤ 99, то пусть yr будет 1900+ToInteger(y); иначе пусть yr будет y.
Вернуть TimeClip(MakeDate(MakeDay(yr, m, dt), MakeTime(h, min, s, milli))).
Свойство length
для UTC
равно 7.
ПРИМЕЧАНИЕ Функция UTC
отличается от конструктора Date
двумя моментами: она возвращает значение времени как число, а не создаёт объект Date, и она интерпретирует аргументы по UTC, а не по местному времени.
Функция now
возвращает числовое значение, которое представляет собой значение времени, означающее дату и время вызова функции now
по UTC.
Объект-прототип Date представляет собой объект типа Date (его [[Class]] равен "Date"
), у которого [[PrimitiveValue]] равно NaN.
Значением внутреннего свойства [[Prototype]] объекта-прототипа Date является стандартный встроенный объект-прототип Object (15.2.4).
В приведённых ниже описаниях функций, которые являются свойствами объекта-прототипа Date, фраза "объект this типа Date" означает объект, который представляет собой значение this, переданное при вызове функции. Если только явно не указано иначе, ни одна из этих функций не является родовой функцией: если значение this не является объектом, для которого значение внутреннего свойства [[Class]] равно "Date"
, генерируется исключение TypeError. Кроме того, фраза “значение времени this” означает числовое значение времени, представленное объектом this типа Date, то есть, значение внутреннего свойства [[PrimitiveValue]] объекта this типа Date.
Начальным значением Date.prototype.constructor
является встроенный конструктор Date
.
Эта функция возвращает строковое значение. Содержимое этой строки зависит от реализации, но оно должно представлять полную дату в соответствии с текущим часовым поясом, и в формате, удобном для восприятия человеком.
ПРИМЕЧАНИЕ Для всех значений Date d
, у которых количество миллисекунд равно нулю, результат Date.parse(
d
.toString())
равен результату d
.valueOf()
. См. 15.9.4.2.
Эта функция возвращает строковое значение. Содержимое этой строки зависит от реализации, но оно должно представлять часть, обозначающую дату, в соответствии с текущим часовым поясом, и в формате, удобном для восприятия человеком.
Эта функция возвращает строковое значение. Содержимое этой строки зависит от реализации, но оно должно представлять часть, обозначающую время, в соответствии с текущим часовым поясом, и в формате, удобном для восприятия человеком.
Эта функция возвращает строковое значение. Содержимое этой строки зависит от реализации, но оно должно представлять полную дату в соответствии с текущим часовым поясом, в формате, удобном для восприятия человеком, и с соблюдением требований текущей языковой настройки внешней среды.
ПРИМЕЧАНИЕ Первый параметр этой функции наверняка будет использоваться в будущей версии данного стандарта. Реализациям не рекомендуется использовать этот параметр для других целей.
Эта функция возвращает строковое значение. Содержимое этой строки зависит от реализации, но оно должно представлять часть, обозначающую дату, в соответствии с текущим часовым поясом, и в формате, удобном для восприятия человеком, и с соблюдением требований текущей языковой настройки внешней среды.
ПРИМЕЧАНИЕ Первый параметр этой функции наверняка будет использоваться в будущей версии данного стандарта. Реализациям не рекомендуется использовать этот параметр для других целей.
Эта функция возвращает строковое значение. Содержимое этой строки зависит от реализации, но оно должно представлять часть, обозначающую время, в соответствии с текущим часовым поясом, в формате, удобном для восприятия человеком, и с соблюдением требований текущей языковой настройки внешней среды.
ПРИМЕЧАНИЕ Первый параметр этой функции наверняка будет использоваться в будущей версии данного стандарта. Реализациям не рекомендуется использовать этот параметр для других целей.
Функция valueOf
возвращает число, которое является значением времени this.
Возвращает значение времени this.
Пусть t будет числовым значением this.
Если t равно NaN, вернуть NaN.
Вернуть YearFromTime(LocalTime(t)).
Пусть t будет числовым значением this.
Если t равно NaN, вернуть NaN.
Вернуть YearFromTime(t).
Пусть t будет числовым значением this.
Если t равно NaN, вернуть NaN.
Вернуть MonthFromTime(LocalTime(t)).
Пусть t будет числовым значением this.
Если t равно NaN, вернуть NaN.
Вернуть MonthFromTime(t).
Пусть t будет числовым значением this.
Если t равно NaN, вернуть NaN.
Вернуть DateFromTime(LocalTime(t)).
Пусть t будет числовым значением this.
Если t равно NaN, вернуть NaN.
Вернуть DateFromTime(t).
Пусть t будет числовым значением this.
Если t равно NaN, вернуть NaN.
Пусть t будет числовым значением this.
Если t равно NaN, вернуть NaN.
Вернуть WeekDay(t).
Пусть t будет числовым значением this.
Если t равно NaN, вернуть NaN.
Вернуть HourFromTime(LocalTime(t)).
Пусть t будет числовым значением this.
Если t равно NaN, вернуть NaN.
Вернуть HourFromTime(t).
Пусть t будет числовым значением this.
Если t равно NaN, вернуть NaN.
Вернуть MinFromTime(LocalTime(t)).
Пусть t будет числовым значением this.
Если t равно NaN, вернуть NaN.
Вернуть MinFromTime(t).
Пусть t будет числовым значением this.
Если t равно NaN, вернуть NaN.
Вернуть SecFromTime(LocalTime(t)).
Пусть t будет числовым значением this.
Если t равно NaN, вернуть NaN.
Вернуть SecFromTime(t).
Пусть t будет числовым значением this.
Если t равно NaN, вернуть NaN.
Вернуть msFromTime(LocalTime(t)).
Пусть t будет числовым значением this.
Если t равно NaN, вернуть NaN.
Вернуть msFromTime(t).
Возвращает разницу в минутах между местным временем и временем по UTC.
Пусть t будет числовым значением this.
Если t равно NaN, вернуть NaN.
Вернуть (t − LocalTime(t)) / msPerMinute.
Присвоить внутреннему свойству [[PrimitiveValue]] для объекта this типа Date значение v.
Вернуть v.
Пусть t будет результатом LocalTime(значение времени this).
Пусть time будет MakeTime(HourFromTime(t), MinFromTime(t), SecFromTime(t), ToNumber(ms)).
Присвоить внутреннему свойству [[PrimitiveValue]] для объекта this типа Date значение u.
Вернуть u.
Пусть t будет числовым значением this.
Пусть time будет MakeTime(HourFromTime(t), MinFromTime(t), SecFromTime(t), ToNumber(ms)).
Присвоить внутреннему свойству [[PrimitiveValue]] для объекта this типа Date значение v.
Вернуть v.
Если ms не задано, this ведёт себя так, как если бы ms было задано значением getMilliseconds()
.
Пусть t будет результатом LocalTime(значение времени this).
Пусть s будет ToNumber(sec).
Если ms не задано, пусть milli будет msFromTime(t); иначе пусть milli будет ToNumber(ms).
Пусть date будет MakeDate(Day(t), MakeTime(HourFromTime(t), MinFromTime(t), s, milli)).
Присвоить внутреннему свойству [[PrimitiveValue]] для объекта this типа Date значение u.
Вернуть u.
Свойство length
для метода setSeconds
равно 2.
Если ms не задано, this ведёт себя так, как если бы ms было задано значением getUTCMilliseconds()
.
Пусть t будет числовым значением this.
Пусть s будет ToNumber(sec).
Если ms не задано, пусть milli будет msFromTime(t); иначе пусть milli будет ToNumber(ms).
Пусть date будет MakeDate(Day(t), MakeTime(HourFromTime(t), MinFromTime(t), s, milli)).
Пусть v будет TimeClip(date).
Присвоить внутреннему свойству [[PrimitiveValue]] для объекта this типа Date значение v.
Вернуть v.
Свойство length
для метода setUTCSeconds
равно 2.
Если sec не задано, this ведёт себя так, как если бы sec было задано значением getSeconds()
.
Если ms не задано, this ведёт себя так, как если бы ms было задано значением getMilliseconds()
.
Пусть t будет результатом LocalTime(значение времени this).
Пусть m будет ToNumber(min).
Если sec не задано, пусть s будет SecFromTime(t); иначе, пусть s будет ToNumber(sec).
Если ms не задано, пусть milli будет msFromTime(t); иначе пусть milli будет ToNumber(ms).
Пусть date будет MakeDate(Day(t), MakeTime(HourFromTime(t), m, s, milli)).
Присвоить внутреннему свойству [[PrimitiveValue]] для объекта this типа Date значение u.
Вернуть u.
Свойство length
для метода setMinutes
равно 3.
Если sec не задано, this ведёт себя так, как если бы sec было задано значением getUTCSeconds()
.
Если ms не задано, эта функция ведёт себя так, как если бы ms было задано значением, полученным посредством getUTCMilliseconds()
.
Пусть t будет числовым значением this.
Пусть m будет ToNumber(min).
Если sec не задано, пусть s будет SecFromTime(t); иначе, пусть s будет ToNumber(sec).
Если ms не задано, пусть milli будет msFromTime(t); иначе пусть milli будет ToNumber(ms).
Пусть date будет MakeDate(Day(t), MakeTime(HourFromTime(t), m, s, milli)).
Пусть v будет TimeClip(date).
Присвоить внутреннему свойству [[PrimitiveValue]] для объекта this типа Date значение v.
Вернуть v.
Свойство length
для метода setUTCMinutes
равно 3.
Если min не задано, this ведёт себя так, как если бы min было задано значением getMinutes()
.
Если sec не задано, this ведёт себя так, как если бы sec было задано значением getSeconds()
.
Если ms не задано, this ведёт себя так, как если бы ms было задано значением getMilliseconds()
.
Пусть t будет результатом LocalTime(значение времени this).
Пусть h будет ToNumber(hour).
Если min не задано, пусть m будет MinFromTime(t); иначе пусть m будет ToNumber(min).
Если sec не задано, пусть s будет SecFromTime(t); иначе, пусть s будет ToNumber(sec).
Если ms не задано, пусть milli будет msFromTime(t); иначе пусть milli будет ToNumber(ms).
Пусть date будет MakeDate(Day(t), MakeTime(h, m, s, milli)).
Присвоить внутреннему свойству [[PrimitiveValue]] для объекта this типа Date значение u.
Вернуть u.
Свойство length
для метода setHours
равно 4.
Если min не задано, this ведёт себя так, как если бы min было задано значением getUTCMinutes()
.
Если sec не задано, this ведёт себя так, как если бы sec было задано значением getUTCSeconds()
.
Если ms не задано, this ведёт себя так, как если бы ms было задано значением getUTCMilliseconds()
.
Пусть t будет числовым значением this.
Пусть h будет ToNumber(hour).
Если min не задано, пусть m будет MinFromTime(t); иначе пусть m будет ToNumber(min).
Если sec не задано, пусть s будет SecFromTime(t); иначе, пусть s будет ToNumber(sec).
Если ms не задано, пусть milli будет msFromTime(t); иначе пусть milli будет ToNumber(ms).
Пусть newDate будет MakeDate(Day(t), MakeTime(h, m, s, milli)).
Пусть v будет TimeClip(newDate).
Присвоить внутреннему свойству [[PrimitiveValue]] для объекта this типа Date значение v.
Вернуть v.
Свойство length
для метода setUTCHours
равно 4.
Пусть t будет результатом LocalTime(значение времени this).
Пусть dt будет ToNumber(date).
Пусть newDate будет MakeDate(MakeDay(YearFromTime(t), MonthFromTime(t), dt), TimeWithinDay(t)).
Присвоить внутреннему свойству [[PrimitiveValue]] для объекта this типа Date значение u.
Вернуть u.
Пусть t будет числовым значением this.
Пусть dt будет ToNumber(date).
Пусть newDate будет MakeDate(MakeDay(YearFromTime(t), MonthFromTime(t), dt), TimeWithinDay(t)).
Пусть v будет TimeClip(newDate).
Присвоить внутреннему свойству [[PrimitiveValue]] для объекта this типа Date значение v.
Вернуть v.
Если date не задано, this ведёт себя так, как если бы date было задано значением getDate()
.
Пусть t будет результатом LocalTime(значение времени this).
Пусть m будет ToNumber(month).
Если date не задано, пусть dt будет DateFromTime(t); в противном случае, пусть dt будет ToNumber(date).
Пусть newDate будет MakeDate(MakeDay(YearFromTime(t), m, dt), TimeWithinDay(t)).
Присвоить внутреннему свойству [[PrimitiveValue]] для объекта this типа Date значение u.
Вернуть u.
Свойство length
для метода setMonth
равно 2.
Если date не задано, this ведёт себя так, как если бы date было задано значением getUTCDate()
.
Пусть t будет числовым значением this.
Пусть m будет ToNumber(month).
Если date не задано, пусть dt будет DateFromTime(t); в противном случае, пусть dt будет ToNumber(date).
Пусть newDate будет MakeDate(MakeDay(YearFromTime(t), m, dt), TimeWithinDay(t)).
Пусть v будет TimeClip(newDate).
Присвоить внутреннему свойству [[PrimitiveValue]] для объекта this типа Date значение v.
Вернуть v.
Свойство length
для метода setUTCMonth
равно 2.
Если month не задано, this ведёт себя так, как если бы month было задано значением getMonth()
.
Если date не задано, this ведёт себя так, как если бы date было задано значением getDate()
.
Пусть t будет результатом LocalTime(значение времени this ); но если значение времени this равно NaN, пусть t будет +0.
Пусть y будет ToNumber(year).
Если month не задано, пусть m будет MonthFromTime(t); иначе пусть m будет ToNumber(month).
Если date не задано, пусть dt будет DateFromTime(t); в противном случае, пусть dt будет ToNumber(date).
Пусть newDate будет MakeDate(MakeDay(y, m, dt), TimeWithinDay(t)).
Присвоить внутреннему свойству [[PrimitiveValue]] для объекта this типа Date значение u.
Вернуть u.
Свойство length
для метода setFullYear
равно 3.
Если month не задано, this ведёт себя так, как если бы month было задано значением getUTCMonth()
.
Если date не задано, this ведёт себя так, как если бы date было задано значением getUTCDate()
.
Пусть t будет значением времени this ; но если значение времени this равно NaN, пусть t будет +0.
Пусть y будет ToNumber(year).
Если month не задано, пусть m будет MonthFromTime(t); иначе пусть m будет ToNumber(month).
Если date не задано, пусть dt будет DateFromTime(t); в противном случае, пусть dt будет ToNumber(date).
Пусть newDate будет MakeDate(MakeDay(y, m, dt), TimeWithinDay(t)).
Пусть v будет TimeClip(newDate).
Присвоить внутреннему свойству [[PrimitiveValue]] для объекта this типа Date значение v.
Вернуть v.
Свойство length
для метода setUTCFullYear
равно 3.
Эта функция возвращает строковое значение. Содержимое этой строки зависит от реализации, но оно должно представлять полную дату по UTC в формате, удобном для восприятия человеком.
ПРИМЕЧАНИЕ Смысл заключается в том, чтобы получить строковое представление даты, более удобочитаемое, чем формат, указанный в пункте 15.9.1.15. Выбранный формат не обязательно должен быть недвусмысленным или легко подвергаться машинному разбору. Если реализация не предоставляет предпочтительного формата, удобного для восприятия человеком, рекомендуется использовать формат, указанный в пункте 15.9.1.15, но вместо символа “T
” для разделения элементов даты и времени следует использовать пробел.
Эта функция возвращает строковое значение, обозначающее момент времени, представленный объектом this типа Date. Строка возвращается в Строковом формате "дата-время", указанном в пункте 15.9.1.15. В строке присутствуют все поля. Часовым поясом всегда является UTC, о чём свидетельствует суффикс Z. Если значение времени этого объекта не является конечным числом, генерируется исключение RangeError.
Эта функция обеспечивает строковое представление объекта Date для использования функцией JSON.stringify
(15.12.3).
При вызове метода toJSON
с аргументом key выполняются следующие шаги:
Пусть O будет результатом вызова ToObject, с передачей значения this в качестве аргумента.
Пусть tv будет ToPrimitive(O, hint Number).
Если tv является числом и не является конечным числом, вернуть null.
Пусть toISO будет результатом вызова внутреннего метода [[Get]] для O с аргументом "toISOString
".
Если IsCallable(toISO) – false, сгенерировать исключение TypeError.
Вернуть результат вызова внутреннего метода [[Call]] для toISO, с O в качестве значения this и с пустым списком аргументов.
ПРИМЕЧАНИЕ 1 Аргумент игнорируется.
ПРИМЕЧАНИЕ 2 Функция toJSON
специально является родовой функцией. Она не требует, чтобы её значение this было объектом типа Date. Поэтому она может передаваться другим типам объектов для использования в качестве метода. Однако она требует, чтобы все эти объекты имели метод toISOString
. Объект может использовать аргумент key в качестве фильтра.
Экземпляры Date наследуют свойства объекта-прототипа Date. Значение их внутреннего свойства [[Class]] равно "Date"
. Кроме того, экземпляры Date имеют внутреннее свойство [[PrimitiveValue]].
Внутреннее свойство [[PrimitiveValue]] является значением времени, представленным объектом this типа Date.