Date.prototype.toLocaleString() - JavaScript

Date.prototype.toLocaleString()
===============================

Метод **`toLocaleString()`** экземпляров `Date` возвращает строку, содержащую зависимое от языка представление этой даты в локальном часовом поясе. В реализациях, поддерживающих `Intl.DateTimeFormat` API, этот метод просто вызывает `Intl.DateTimeFormat`.

При каждом вызове `toLocaleString` происходит поиск по большой базе локализованных строк, что может быть неэффективным. Когда метод вызывается много раз с одинаковыми параметрами, лучше создать объект `Intl.DateTimeFormat` и использовать его метод `format()`, потому что объект `DateTimeFormat` запоминает переданные ему параметры и может кешировать данные, чтобы последующие вызовы `format` могли выполнять поиск с более определённым контекстом.

Интерактивный пример
--------------------

Синтаксис
---------

```js
toLocaleString()
toLocaleString(locales)
toLocaleString(locales, options)
```

### Параметры

Параметры `locales` и `options` изменяют поведение функции и позволяют приложениям определять язык, правила форматирования которого, следует использовать.

В реализациях, поддерживающих `Intl.DateTimeFormat` API, эти параметры соответствуют параметрам конструктора `Intl.DateTimeFormat()` (en-US). Реализации без поддержки `Intl.DateTimeFormat` должны игнорировать оба параметра, используя локаль и формат возвращаемой строки определяемые самой реализацией.

`locales` Необязательный

Строка с языковым тегом BCP 47 или массив таких строк. Соответствует параметру `locales` (en-US) конструктора `Intl.DateTimeFormat().

В реализациях без поддержки `Intl.DateTimeFormat` этот параметр игнорируется и обычно используется локаль устройства.

`options` Необязательный

Объект определяющий выходной формат. Соответствует параметру `options` (en-US) конструктора `Intl.DateTimeFormat()`. Опция `timeStyle` должна быть `undefined` или будет возникать `TypeError`. Если `weekday`, `year`, `month` и `day` одновременно равны `undefined`, то `year`, `month` и `day` будут установлены в `"numeric"`.

В реализациях без поддержки `Intl.DateTimeFormat` этот параметр игнорируется.

Смотрите описание конструктора `Intl.DateTimeFormat()` (en-US) для подробностей использования этих параметров.

### Возвращаемое значение

Строка, представляющая указанную дату в соответствии с языковыми требованиями.

В реализациях с поддержкой `Intl.DateTimeFormat` результат будет эквивалентным `new Intl.DateTimeFormat(locales, options).format(date)`.

**Примечание:** В большинстве случаев форматирование, возвращаемое `toLocaleString()`, единообразно. Однако результат может быть разным в зависимости от времени, языка и реализации — это допускается спецификацией. Не следует сравнивать результат `toLocaleString()` со статическими значениями.

Примеры
-------

### Использование `toLocaleString()`

При использовании без указания локали возвращается строка, отформатированная в соответствии с локалью и настройками по умолчанию.

```js
const date = new Date(Date.UTC(2012, 11, 12, 3, 0, 0));

// Вывод toLocaleString() без параметров зависит от реализации,
// локали по умолчанию и часового пояса по умолчанию
console.log(date.toLocaleString());
// "12/11/2012, 7:00:00 PM", если код запущен с локалью en-US и часовым поясом America/Los\_Angeles
```

### Проверка поддержки параметров `locales` и `options`

Параметры `locales` и `options` могут поддерживаться не во всех реализациях. В реализациях без поддержки интернационализации `toLocaleString()` всегда использует системную локаль, что может оказаться не тем, что вам нужно. Поскольку любая реализация, поддерживающая параметры `locales` и `options`, должна поддерживать `Intl` API, проверить наличие последней можно таким способом:

```js
function toLocaleStringSupportsLocales() {
  return (
    typeof Intl === "object" &&
    !!Intl &&
    typeof Intl.DateTimeFormat === "function"
  );
}
```

### Использование параметра `locales`

Этот пример показывает некоторые локализованные форматы даты и времени. Для получения формата языка, используемого в пользовательском интерфейсе вашего приложения, убедитесь, что вы указали этот язык (и, возможно, несколько запасных языков) используя параметр `locales`:

```js
const date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));

// Форматирование ниже предполагает, что местный часовой пояс равен
// America/Los\_Angeles для локали США

// В американском английском используется порядок месяц-день-год
// и 12-часовой формат времени
console.log(date.toLocaleString("en-US"));
// "12/19/2012, 7:00:00 PM"

// В британском английском используется порядок день-месяц-год
// и 24-часовой формат времени
console.log(date.toLocaleString("en-GB"));
// "20/12/2012 03:00:00"

// В корейском используется порядок год-месяц-день
// и 12-часовой формат времени
console.log(date.toLocaleString("ko-KR"));
// "2012. 12. 20. 오후 12:00:00"

// В большинстве арабоязычных стран используют настоящие арабские цифры
console.log(date.toLocaleString("ar-EG"));
// "٢٠/١٢/٢٠١٢ ٥:٠٠:٠٠ ص"

// В Японии приложения могут захотеть использовать японский календарь,
// в котором 2012 год является 24-м годом эры Хейсей
console.log(date.toLocaleString("ja-JP-u-ca-japanese"));
// "24/12/20 12:00:00"

// Если запрашиваемый язык может не поддерживаться, например
// балийский, откатываемся на запасной язык, в данном случае индонезийский
console.log(date.toLocaleString(["ban", "id"]));
// "20/12/2012 11.00.00"
```

### Использование параметра `options`

Результат, предоставляемый методом `toLocaleString()`, может быть настроен с помощью параметра `options`:

```js
const date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));

// Запрашиваем день недели вместе с длинным форматом даты
var options = {
  weekday: "long",
  year: "numeric",
  month: "long",
  day: "numeric",
};
console.log(date.toLocaleString("de-DE", options));
// "Donnerstag, 20. Dezember 2012"

// Приложение может захотеть использовать UTC и показать это
options.timeZone = "UTC";
options.timeZoneName = "short";
console.log(date.toLocaleString("en-US", options));
// "Thursday, December 20, 2012, GMT"

// Иногда даже в США нужен 24-х часовой формат времени
console.log(date.toLocaleString("en-US", { hour12: false }));
// "12/19/2012, 19:00:00"
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-date.prototype.tolocalestring |
| ECMAScript Internationalization API Specification # sup-date.prototype.tolocalestring |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* `Intl.DateTimeFormat`
* `Date.prototype.toLocaleDateString()`
* `Date.prototype.toLocaleTimeString()`
* `Date.prototype.toString()`


Date.prototype.toLocaleTimeString() - JavaScript

Date.prototype.toLocaleTimeString()
===================================

Метод **`toLocaleTimeString()`** экземпляров `Date` возвращает строку, содержащую зависимое от языка представление времени этой даты в локальном часовом поясе. В реализациях, поддерживающих `Intl.DateTimeFormat` API, этот метод просто вызывает `Intl.DateTimeFormat`.

При каждом вызове `toLocaleTimeString` происходит поиск по большой базе локализованных строк, что может быть неэффективным. Когда метод вызывается много раз с одинаковыми параметрами, лучше создать объект `Intl.DateTimeFormat` и использовать его метод `format()`, потому что объект `DateTimeFormat` запоминает переданные ему параметры и может кешировать данные, чтобы последующие вызовы `format` могли выполнять поиск с более определённым контекстом.

Интерактивный пример
--------------------

Синтаксис
---------

```js
toLocaleTimeString()
toLocaleTimeString(locales)
toLocaleTimeString(locales, options)
```

### Параметры

Параметры `locales` и `options` изменяют поведение функции и позволяют приложениям определять язык, правила форматирования которого, следует использовать.

В реализациях, поддерживающих `Intl.DateTimeFormat` API, эти параметры соответствуют параметрам конструктора `Intl.DateTimeFormat()` (en-US). Реализации без поддержки `Intl.DateTimeFormat` должны игнорировать оба параметра, используя локаль и формат возвращаемой строки определяемые самой реализацией.

`locales` Необязательный

Строка с языковым тегом BCP 47 или массив таких строк. Соответствует параметру `locales` (en-US) конструктора `Intl.DateTimeFormat().

В реализациях без поддержки `Intl.DateTimeFormat` этот параметр игнорируется и обычно используется локаль устройства.

`options` Необязательный

Объект определяющий выходной формат. Соответствует параметру `options` (en-US) конструктора `Intl.DateTimeFormat()`. Опция `timeStyle` должна быть `undefined` или будет возникать `TypeError`. Если `weekday`, `year`, `month` и `day` одновременно равны `undefined`, то `year`, `month` и `day` будут установлены в `"numeric"`.

В реализациях без поддержки `Intl.DateTimeFormat` этот параметр игнорируется.

Смотрите описание конструктора `Intl.DateTimeFormat()` (en-US) для подробностей использования этих параметров.

### Возвращаемое значение

Строка, представляющая часть указанной даты в соответствии с языковыми требованиями.

В реализациях с поддержкой `Intl.DateTimeFormat` результат будет эквивалентным `new Intl.DateTimeFormat(locales, options).format(date)`.

**Примечание:** В большинстве случаев форматирование, возвращаемое `toLocaleString()`, единообразно. Однако результат может быть разным в зависимости от времени, языка и реализации — это допускается спецификацией. Не следует сравнивать результат `toLocaleTimeString()` со статическими значениями.

Примеры
-------

### Использование `toLocaleTimeString()`

При использовании без указания локали возвращается строка, отформатированная в соответствии с локалью и опциями по умолчанию.

```js
const date = new Date(Date.UTC(2012, 11, 12, 3, 0, 0));

// Вывод toLocaleTimeString() без параметров зависит от реализации,
// локали по умолчанию и часового пояса по умолчанию
console.log(date.toLocaleTimeString());
// "7:00:00 PM", если код запущен с локалью en-US и часовым поясом America/Los\_Angeles
```

### Проверка поддержки параметров `locales` и `options`

Параметры `locales` и `options` могут поддерживаться не во всех реализациях. В реализациях без поддержки интернационализации `toLocaleTimeString()` всегда использует системную локаль, что может оказаться не тем, что вам нужно. Поскольку любая реализация, поддерживающая параметры `locales` и `options`, должна поддерживать `Intl` API, проверить наличие последней можно таким способом:

```js
function toLocaleTimeStringSupportsLocales() {
  return (
    typeof Intl === "object" &&
    !!Intl &&
    typeof Intl.DateTimeFormat === "function"
  );
}
```

### Использование параметра `locales`

Этот пример показывает некоторые локализованные форматы времени. Для получения формата языка, используемого в пользовательском интерфейсе вашего приложения, убедитесь, что вы указали этот язык (и, возможно, несколько запасных языков) используя параметр `locales`:

```js
const date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));

// Форматирование ниже предполагает, что местный часовой пояс равен
// America/Los\_Angeles для локали США

// В американском английском используется 12-часовой формат времени
console.log(date.toLocaleTimeString("en-US"));
// "7:00:00 PM"

// В британском английском используется 24-часовой формат времени
console.log(date.toLocaleTimeString("en-GB"));
// "03:00:00"

// В корейском используется 12-часовой формат времени
console.log(date.toLocaleTimeString("ko-KR"));
// "오후 12:00:00"

// В большинстве арабоязычных стран используют настоящие арабские цифры
console.log(date.toLocaleTimeString("ar-EG"));
// "٧:٠٠:٠٠ م"

// Если запрашиваемый язык может не поддерживаться, например
// балийский, откатываемся на запасной язык, в данном случае индонезийский
console.log(date.toLocaleTimeString(["ban", "id"]));
// "11.00.00"
```

### Использование параметра `options`

Результат, предоставляемый методом `toLocaleTimeString()`, может быть настроен с помощью параметра `options`:

```js
const date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));

// Приложение может захотеть использовать UTC и показать это
const options = { timeZone: "UTC", timeZoneName: "short" };
console.log(date.toLocaleTimeString("en-US", options));
// "3:00:00 AM GMT"

// Иногда даже в США нужен 24-х часовой формат времени
console.log(date.toLocaleTimeString("en-US", { hour12: false }));
// "19:00:00"

// Отображение только часов и минут, используем локаль по умолчанию (пусть массив)
console.log(
  date.toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" }),
);
// "20:01"
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-date.prototype.tolocaletimestring |
| ECMAScript Internationalization API Specification # sup-date.prototype.tolocaletimestring |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* `Intl.DateTimeFormat`
* `Date.prototype.toLocaleDateString()`
* `Date.prototype.toLocaleString()`
* `Date.prototype.toTimeString()`
* `Date.prototype.toString()`


Date.prototype.setDate() - JavaScript

Date.prototype.setDate()
========================

Сводка
------

Метод **`setDate()`** устанавливает день месяца указанной даты по местному времени.

Синтаксис
---------
```

dateObj.setDate(dayValue)
```

### Параметры

`dayValue`

Целое число, представляющее номер дня в месяце.

### Возвращаемое значение

В результате выполнения функция setDate() изменяет текущий объект (`Date`) и возвращает количество миллисекунд от начала эпохи (1 января 1970 00:00:00 UTC) для полученного значения объекта.

Описание
--------

Если значение параметра `dayValue` будет выходить за пределы количества дней для месяца, метод `setDate()` соответственно обновит объект `Date`. Например, если в качестве `dayValue` передать значение 0, дата будет установлена в последний день предыдущего месяца.

Примеры
-------

### Пример: использование метода `setDate()`

```js
var theBigDay = new Date(1962, 6, 7); // 1962-07-07
theBigDay.setDate(24); // 1962-07-24
theBigDay.setDate(32); // 1962-08-01
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-date.prototype.setdate |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* `Date.prototype.getDate()`
* `Date.prototype.setUTCDate()`


Date.prototype.getSeconds() - JavaScript

Date.prototype.getSeconds()
===========================

Сводка
------

Метод **`getSeconds()`** возвращает секунды указанной даты по местному времени.

Синтаксис
---------
```

dateObj.getSeconds()
```

### Параметры

Нет.

### Возвращаемое значение

Значение, возвращённое методом `getSeconds()`, является целым числом от 0 до 59.

Примеры
-------

### Пример: использование метода `getSeconds()`

Вторая инструкция в примере ниже присваивает значение 30 переменной `seconds` из значения переменной `date` объекта `Date`.

```js
let date = new Date("December 25, 1995 23:15:30");
let seconds = date.getSeconds();

console.log(seconds); // 30
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-date.prototype.getseconds |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* `Date.prototype.getUTCSeconds()`
* `Date.prototype.setSeconds()`


Date.prototype.getTimezoneOffset() - JavaScript

Date.prototype.getTimezoneOffset()
==================================

Сводка
------

Метод **`getTimezoneOffset()`** возвращает смещение часового пояса относительно часового пояса UTC в минутах для текущей локали.

Синтаксис
---------
```

dateObj.getTimezoneOffset()
```

### Параметры

Нет.

### Возвращаемое значение

Возвращает смещение часового пояса, являющееся разностью в минутах между временем UTC и местным временем. Обратите внимание, что это значит, что смещение будет положительным для местного часового пояса, находящегося западнее часового пояса UTC и отрицательным — восточнее. Например, если ваш часовой пояс равен UTC+10 (австралийское восточное поясное время), будет возвращено значение -600. Наличие летнего и зимнего времени не даёт этому смещению быть постоянным, даже в пределах одного часового пояса.

Примеры
-------

### Пример: использование метода `getTimezoneOffset()`

```js
var x = new Date();
var currentTimeZoneOffsetInHours = x.getTimezoneOffset() / 60;
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-date.prototype.gettimezoneoffset |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.


Date.prototype.setUTCMinutes() - JavaScript

Date.prototype.setUTCMinutes()
==============================

Сводка
------

Метод **`setUTCMinutes()`** устанавливает минуты указанной даты по всемирному координированному времени.

Синтаксис
---------
```

dateObj.setUTCMinutes(minutesValue[, secondsValue[, msValue]])
```

### Параметры

`minutesValue`

Целое число от 0 до 59, представляющее минуты.

`secondsValue`

Необязательный параметр. Целое число от 0 до 59, представляющее секунды. Если вы определите параметр `secondsValue`, вы также должны определить параметр `minutesValue`.

`msValue`

Необязательный параметр. Целое число от 0 до 999, представляющее миллисекунды. Если вы определите параметр `msValue`, вы также должны определить параметры `minutesValue` и `secondsValue`.

Описание
--------

Если вы не определите значения параметров `secondsValue` и `msValue`, будут использоваться значения, возвращаемые методами `getUTCSeconds()` и `getUTCMilliseconds()`.

Если значение определяемого параметра будет выходить за пределы ожидаемого диапазона, метод `setUTCMinutes()` попытается соответственно обновить другие параметры и информацию о дате в объекте `Date`. Например, если в качестве `secondsValue` передать значение 100, минуты увеличатся на 1 (`minutesValue + 1`), а в качестве секунд будет использоваться значение 40.

Примеры
-------

### Пример: использование метода `setUTCMinutes()`

```js
var theBigDay = new Date();
theBigDay.setUTCMinutes(43);
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-date.prototype.setutcminutes |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* `Date.prototype.getUTCMinutes()`
* `Date.prototype.setMinutes()`


Date.prototype.toTimeString() - JavaScript

Date.prototype.toTimeString()
=============================

Сводка
------

Метод **`toTimeString()`** возвращает часть, содержащую только время объекта `Date` в виде человеко-читаемой строки на американском английском.

Синтаксис
---------
```

dateObj.toTimeString()
```

Описание
--------

Экземпляры объекта `Date` ссылаются на определённый момент времени. Вызов метода `toString()` вернёт дату, отформатированную в виде человеко-читаемой строки на американском английском. В SpiderMonkey она состоит из части, содержащей дату (день, месяц и год) и следующей за ней части, содержащей время (часы, минуты, секунды и часовой пояс). Иногда желательно получить строку, содержащую только часть со временем; этого можно достигнуть использованием метода `toTimeString()`.

Метод `toTimeString()` полезен тем, что совместимые движки, реализующие ECMA-262 (en-US) могут давать разные строки с помощью метода `toString()` объекта `Date`, поскольку формат строки зависит от реализации и простой подход с разрезанием строки на дату и время может не всегда сработать.

Примеры
-------

### Пример: базовое использование метода `toTimeString()`

```js
var d = new Date(1993, 6, 28, 14, 39, 7);

console.log(d.toString()); // напечатает Wed Jul 28 1993 14:39:07 GMT-0600 (PDT)
console.log(d.toTimeString()); // напечатает 14:39:07 GMT-0600 (PDT)
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-date.prototype.totimestring |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* `Date.prototype.toLocaleTimeString()`
* `Date.prototype.toDateString()`
* `Date.prototype.toString()`


Date.prototype.setMonth() - JavaScript

Date.prototype.setMonth()
=========================

Сводка
------

Метод **`setMonth()`** устанавливает месяц указанной даты по местному времени.

Синтаксис
---------
```

dateObj.setMonth(monthValue[, dayValue])
```

### Версия до JavaScript 1.3
```

dateObj.setMonth(monthValue)
```

### Parameter

`monthValue`

Целое число от 0 до 11, представляющее месяцы от января до декабря.

`dayValue`

Необязательный параметр. Целое число от 1 до 31, представляющее день месяца.

Описание
--------

Если вы не определите значения параметра `dayValue`, будет использоваться значение, возвращаемое методом `getDate()`.

Если значение определяемого параметра будет выходить за пределы ожидаемого диапазона, метод `setMonth()` попытается соответственно обновить другой параметр и информацию о дате в объекте `Date`. Например, если в качестве `monthValue` передать значение 15, год увеличится на 1, а в качестве месяца будет использоваться значение 3.

Примеры
-------

### Пример: использование метода `setMonth()`

```js
var theBigDay = new Date();
theBigDay.setMonth(6);
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-date.prototype.setmonth |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* `Date.prototype.getMonth()`
* `Date.prototype.setUTCMonth()`


Date.prototype.setYear() - JavaScript

Date.prototype.setYear()
========================

**Устарело:** Эта возможность была удалена из веб-стандартов. Хотя некоторые браузеры по-прежнему могут поддерживать её, она находится в процессе удаления. Не используйте её ни в старых, ни в новых проектах. Страницы или веб-приложения, использующие её, могут в любой момент сломаться.

Сводка
------

Метод **`setYear()`** устанавливает год указанной даты по местному времени. Поскольку метод `setYear()` не устанавливает полный год («проблема 2000 года»), он больше не используется и был заменён методом `setFullYear()`.

Синтаксис
---------
```

dateObj.setYear(yearValue)
```

### Параметры

`yearValue`

Целое число.

Описание
--------

Если параметр `yearValue` является числом в диапазоне от 0 до 99 (включительно), год объекта `dateObj` устанавливается в `1900 + yearValue`. В противном случае год объекта `dateObj` устанавливается в `yearValue`.

Примеры
-------

### Пример: использование метода `setYear()`

Первые две строки устанавливают год в 1996. Третья строка устанавливает год в 2000.

```js
var theBigDay = new Date();

theBigDay.setYear(96);
theBigDay.setYear(1996);
theBigDay.setYear(2000);
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-date.prototype.setyear |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* `Date.prototype.getFullYear()`
* `Date.prototype.getUTCFullYear()`
* `Date.prototype.setFullYear()`
* `Date.prototype.setUTCFullYear()`


Date.prototype.setMinutes() - JavaScript

Date.prototype.setMinutes()
===========================

Сводка
------

Метод **`setMinutes()`** устанавливает минуты указанной даты по местному времени.

Синтаксис
---------
```

dateObj.setMinutes(minutesValue[, secondsValue[, msValue]])
```

### Версия до JavaScript 1.3
```

dateObj.setMinutes(minutesValue)
```

### Параметры

`minutesValue`

Целое число от 0 до 59, представляющее минуты.

`secondsValue`

Необязательный параметр. Целое число от 0 до 59, представляющее секунды. Если вы определите параметр `secondsValue`, вы также должны определить параметр `minutesValue`.

`msValue`

Необязательный параметр. Целое число от 0 до 999, представляющее миллисекунды. Если вы определите параметр `msValue`, вы также должны определить параметры `minutesValue` и `secondsValue`.

### Возвращаемое значение

Количество миллисекунд между 1 января 1970 00:00:00 UTC и обновлённой датой.

Описание
--------

Если вы не определите значения параметров `secondsValue` и `msValue`, будут использоваться значения, возвращаемые методами `getSeconds()` и `getMilliseconds()`.

Если значение определяемого параметра будет выходить за пределы ожидаемого диапазона, метод `setMinutes()` попытается соответственно обновить другие параметры и информацию о дате в объекте `Date`. Например, если в качестве `secondsValue` передать значение 100, минуты увеличатся на 1 (`minutesValue + 1`), а в качестве секунд будет использоваться значение 40.

Примеры
-------

### Пример: использование метода `setMinutes()`

```js
var theBigDay = new Date();
theBigDay.setMinutes(45);
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-date.prototype.setminutes |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* `Date.prototype.getMinutes()`
* `Date.prototype.setUTCMinutes()`


Date.prototype.getTime() - JavaScript

Date.prototype.getTime()
========================

Метод **`getTime()`** возвращает числовое значение, соответствующее указанной дате по всемирному координированному времени.

Вы можете использовать этот метод для того, чтобы присвоить дату и время другому объекту `Date`. Этот метод функционально эквивалентен методу `valueOf()`.

Интерактивный пример
--------------------

Синтаксис
---------
```

dateObj.getTime()
```

### Параметры

Нет.

### Возвращаемое значение

Значение, возвращённое методом `getTime()`, является количеством миллисекунд, прошедших с 1 января 1970 года 00:00:00 по UTC.

Примеры
-------

### Пример: использование метода `getTime()` для копирования дат

Конструирует новый объект даты с идентичным значением времени.

```js
let birthday = new Date(2020, 12, 20);
let copy = new Date();
copy.setTime(birthday.getTime());

console.log(copy.setTime(birthday.getTime())); // 1611090000000
```

### Пример: замер времени выполнения

Вычитанием двух последовательных вызовов метода `getTime()` на заново сконструированных объектах `Date` можно замерить промежуток времени, произошедший между двумя этими вызовами. Это можно использовать для вычисления времени выполнения неких операций.

```js
let end, start;

start = new Date();
for (let i = 0; i < 1000; i++) {
  Math.sqrt(i);
}
end = new Date();

console.log("Операция заняла " + (end.getTime() - start.getTime()) + " мсек");
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-date.prototype.gettime |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* `Date.prototype.setTime()`
* `Date.prototype.valueOf()`


Date.prototype.toUTCString() - JavaScript

Date.prototype.toUTCString()
============================

Сводка
------

Метод **`toUTCString()`** преобразует дату в строку, используя часовой пояс UTC.

Синтаксис
---------
```

dateObj.toUTCString()
```

### Параметры

Нет.

Описание
--------

Значение, возвращаемое методом `toUTCString()`, является человеко-читаемой строкой в часовом поясе UTC. Формат возвращаемого значения зависит от платформы. Наиболее распространённым значением является форматированная по RFC-1123 временная метка, которая является немного обновлённой версией временной метки RFC-822.

Примеры
-------

### Пример: использование метода `toUTCString()`

```js
var today = new Date();
var UTCstring = today.toUTCString();
// Mon, 03 Jul 2006 21:44:38 GMT
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-date.prototype.toutcstring |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* `Date.prototype.toLocaleString()`
* `Date.prototype.toDateString()`
* `Date.prototype.toISOString()`


Date.prototype.toISOString() - JavaScript

Date.prototype.toISOString()
============================

Сводка
------

Метод **`toISOString()`** возвращает строку в формате ISO (расширенный формат ISO 8601), который можно описать следующим образом: **`YYYY-MM-DDTHH:mm:ss.sssZ`**. Часовой пояс всегда равен UTC, что обозначено суффиксом `"Z"`.

Синтаксис
---------
```

dateObj.toISOString()
```

Примеры
-------

### Пример: использование метода `toISOString()`

```js
var today = new Date("05 October 2011 14:48 UTC");

console.log(today.toISOString()); // вернёт 2011-10-05T14:48:00.000Z
```

Пример выше использует разбор нестандартного строкового значения, которое может разобраться некорректно в браузерах, отличных от Firefox.

Полифил
-------

Этот метод был стандартизирован в ECMA-262 5-го издания. Отсутствие этого метода в движках, которые не были обновлены для его поддержки, можно обойти следующей прокладкой:

```js
if (!Date.prototype.toISOString) {
  (function () {
    function pad(number) {
      if (number < 10) {
        return "0" + number;
      }
      return number;
    }

    Date.prototype.toISOString = function () {
      return (
        this.getUTCFullYear() +
        "-" +
        pad(this.getUTCMonth() + 1) +
        "-" +
        pad(this.getUTCDate()) +
        "T" +
        pad(this.getUTCHours()) +
        ":" +
        pad(this.getUTCMinutes()) +
        ":" +
        pad(this.getUTCSeconds()) +
        "." +
        (this.getUTCMilliseconds() / 1000).toFixed(3).slice(2, 5) +
        "Z"
      );
    };
  })();
}
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-date.prototype.toisostring |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* `Date.prototype.toLocaleDateString()`
* `Date.prototype.toTimeString()`
* `Date.prototype.toUTCString()`


Date.prototype.toJSON() - JavaScript

Date.prototype.toJSON()
=======================

Сводка
------

Метод **`toJSON()`** возвращает представление объекта `Date` в виде JSON.

Синтаксис
---------
```

dateObj.toJSON()
```

Описание
--------

Экземпляры объекта `Date` ссылаются на определённый момент времени. Вызов метода `toJSON()` вернёт строку, отформатированную в JSON (при помощи метода `toISOString()`), представляющую значение объекта `Date`. Этот метод, как правило, предназначен для сериализации объектов `Date` в JSON.

Примеры
-------

### Пример: использование метода `toJSON()`

```js
var jsonDate = new Date().toJSON();
var backToDate = new Date(jsonDate);

console.log("Сериализованный объект даты: " + jsonDate);
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-date.prototype.tojson |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* `Date.prototype.toLocaleDateString()`
* `Date.prototype.toTimeString()`
* `Date.prototype.toUTCString()`


Date.prototype.getUTCDate() - JavaScript

Date.prototype.getUTCDate()
===========================

Сводка
------

Метод **`getUTCDate()`** возвращает день месяца указанной даты по всемирному координированному времени.

Синтаксис
---------
```

dateObj.getUTCDate()
```

### Параметры

Нет.

### Возвращаемое значение

Значение, возвращённое методом `getUTCDate()`, является целым числом от 1 до 31.

Примеры
-------

### Пример: использование метода `getUTCDate()`

В следующем примере переменной `day` присваивается значение дня из текущей даты.

```js
var today = new Date();
var day = today.getUTCDate();
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-date.prototype.getutcdate |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* `Date.prototype.getDate()`
* `Date.prototype.getUTCDay()`
* `Date.prototype.setUTCDate()`


Date.prototype.setUTCMonth() - JavaScript

Date.prototype.setUTCMonth()
============================

Сводка
------

Метод **`setUTCMonth()`** устанавливает месяц указанной даты по всемирному координированному времени.

Синтаксис
---------
```

dateObj.setUTCMonth(monthValue[, dayValue])
```

### Параметры

`monthValue`

Целое число от 0 до 11, представляющее месяцы от января до декабря.

`dayValue`

Необязательный параметр. Целое число от 1 до 31, представляющее день месяца.

Описание
--------

Если вы не определите значения параметра `dayValue`, будет использоваться значение, возвращаемое методом `getUTCDate()`.

Если значение определяемого параметра будет выходить за пределы ожидаемого диапазона, метод `setUTCMonth()` попытается соответственно обновить другой параметр и информацию о дате в объекте `Date`. Например, если в качестве `monthValue` передать значение 15, год увеличится на 1, а в качестве месяца будет использоваться значение 3.

Примеры
-------

### Пример: использование метода `setUTCMonth()`

```js
var theBigDay = new Date();
theBigDay.setUTCMonth(11);
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-date.prototype.setutcmonth |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* `Date.prototype.getUTCMonth()`
* `Date.prototype.setMonth()`


Date.prototype.getFullYear() - JavaScript

Date.prototype.getFullYear()
============================

Сводка
------

Метод **`getFullYear()`** возвращает год указанной даты по местному времени.

Используйте этот метод вместо метода `getYear()`.

Синтаксис
---------
```

dateObj.getFullYear()
```

### Параметры

Нет.

### Возвращаемое значение

Значение, возвращённое методом `getFullYear()` является абсолютным числом. Для дат между 1000 и 9999 годом метод `getFullYear()` возвращает четырёхзначный номер, например, 1995. Используйте эту функцию, чтобы быть уверенным, что год будет правильным после 2000 года.

Примеры
-------

### Пример: использование метода `getFullYear()`

В следующем примере переменной `year` присваивается четырёхзначное значение текущего года.

```js
let today = new Date(); // Mon Nov 23 2020 15:23:46 GMT+0300 (Москва, стандартное время)
let year = today.getFullYear(); // 2020
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-date.prototype.getfullyear |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* `Date.prototype.getUTCFullYear()`
* `Date.prototype.setFullYear()`
* `Date.prototype.getYear()`


Date.prototype.setUTCSeconds() - JavaScript

Date.prototype.setUTCSeconds()
==============================

Сводка
------

Метод **`setUTCSeconds()`** устанавливает секунды указанной даты по всемирному координированному времени.

Синтаксис
---------
```

dateObj.setUTCSeconds(secondsValue[, msValue])
```

### Параметры

`secondsValue`

Целое число от 0 до 59, представляющее количество секунд.

`msValue`

Необязательный параметр. Число от 0 до 999, представляющее количество миллисекунд.

Описание
--------

Если вы не определите значения параметра `msValue`, будет использоваться значение, возвращаемое методом `getUTCMilliseconds()`.

Если значение определяемого параметра будет выходить за пределы ожидаемого диапазона, метод `setUTCSeconds()` попытается соответственно обновить другой параметр и информацию о дате в объекте `Date`. Например, если в качестве `secondsValue` передать значение 100, минуты увеличатся на 1, а в качестве секунд будет использоваться значение 40.

Примеры
-------

### Пример: использование метода `setUTCSeconds()`

```js
var theBigDay = new Date();
theBigDay.setUTCSeconds(20);
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-date.prototype.setutcseconds |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* `Date.prototype.getUTCSeconds()`
* `Date.prototype.setSeconds()`


Date.UTC() - JavaScript

Date.UTC()
==========

Метод **`Date.UTC()`** принимает те же самые параметры, что и самая длинная форма конструктора `Date` и возвращает количество миллисекунд, прошедших с 1 января 1970 года 00:00:00 по UTC.

Интерактивный пример
--------------------

Синтаксис
---------

**Начиная с ECMAScript 2017:**
```

Date.UTC(year[, month[, day[, hour[, minute[, second[, millisecond]]]]]])
```

**ECMAScript 2016 и ранее:** (*использование `month` обязательно*)
```

Date.UTC(year, month[, day[, hour[, minute[, second[, millisecond]]]]])
```

### Параметры

`year`

Год, полностью.

`month`

Целое число между `0` и `11`, представляющее месяц. (начиная с ES2017 необязательный параметр)

`day` Необязательный

Целое число между `1` и `31`, представляющее дни месяца.

`hour` Необязательный

Целое число между `0` и `23`, представляющее часы.

`minute` Необязательный

Целое число между `0` и `59`, представляющее минуты.

`second` Необязательный

Целое число между `0` и `59`, представляющее секунды.

`millisecond` Необязательный

Целое число между `0` и `999`, представляющее миллисекунды.

### Возвращаемое значение

Число, представляющее собой количество миллисекунд, прошедших с 1-ого Января 1970 года 00:00:00 UTC.

Описание
--------

Метод `UTC()` принимает параметры даты, разделённые запятыми и возвращает количество миллисекунд, прошедших с 1 января 1970 года 00:00:00 по UTC и указанным вами временем.

Для параметра `year` вы должны указать полный год; например, 1998. Если указан год между `0` и `99`, метод преобразует год в год в 20-м веке `(1900 + year)`; например, если вы указали `95`, будет использоваться `1995` год.

Метод `UTC()` отличается от конструктора `Date` двумя вещами.

* Метод `Date.UTC()` использует всемирное время вместо местного времени.
* Метод `Date.UTC()` возвращает значение времени как число вместо создания объекта `Date`.

Если определённый вами параметр выходит за пределы ожидаемого диапазона, метод `UTC()` обновит другие параметры чтобы привести это число в ожидаемый диапазон. Например, если вы используете в качестве месяца число 15, год будет увеличен на 1 `(year + 1)`, и в качестве месяца будет использоваться значение 3.

Поскольку метод `UTC()` является статическим методом объекта `Date`, вы всегда должны использовать его как `Date.UTC()`.

Примеры
-------

### Пример: использование `Date.UTC()`

Следующее выражение создаёт объект `Date`, используя всемирное время вместо местного:

```js
var utcDate = new Date(Date.UTC(2018, 11, 1, 0, 0, 0));
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-date.utc |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Примечание о совместимости
--------------------------

### Date.UTC() с менее чем двумя аргументами

Когда вы предоставляете функции `Date.UTC()` меньше, чем два аргумента, то по стандартам ECMAScript 2017, она должна вернуть `NaN`. Браузерные движки, не поддерживающие подобное поведение, были обновлены (смотрите bug 1050755, ecma-262 #642).

```js
Date.UTC();
Date.UTC(1);

// Safari: NaN
// Chrome/Opera/V8: NaN

// Firefox <54: non-NaN
// Firefox 54+: NaN

// IE: non-NaN
// Edge: NaN
```

Смотрите также
--------------

* `Date.parse()`
* `Date`


Date.prototype.getMinutes() - JavaScript

Date.prototype.getMinutes()
===========================

Сводка
------

Метод **`getMinutes()`** возвращает минуты указанной даты по местному времени.

Синтаксис
---------
```

dateObj.getMinutes()
```

### Параметры

Нет.

### Возвращаемое значение

Значение, возвращённое методом `getMinutes()`, является целым числом от 0 до 59.

Примеры
-------

### Пример: использование метода `getMinutes()`

Вторая инструкция в примере ниже присваивает значение 15 переменной `minutes` из значения объекта `Date` `date`.

```js
let date = new Date("December 25, 1995 23:15:30");
let minutes = date.getMinutes();

console.log(minutes); // 15
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-date.prototype.getminutes |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* `Date.prototype.getUTCMinutes()`
* `Date.prototype.setMinutes()`


Date.parse() - JavaScript

Date.parse()
============

Сводка
------

Метод **`Date.parse()`** разбирает строковое представление даты и возвращает количество миллисекунд, прошедших с 1 января 1970 года 00:00:00 по UTC.

Синтаксис
---------

Прямой вызов:
```

Date.parse(dateString)
```

Неявный вызов:
```

new Date(dateString)
```

### Параметры

`dateString`

Строковое представление даты из RFC2822 (на английском, на русском) или ISO 8601. Могут использоваться и другие форматы, но результаты в таком случае будут непредсказуемые.

Описание
--------

Метод `parse()` принимает строку с датой (например, `"Dec 25, 1995"`) и возвращает количество миллисекунд, прошедших с 1 января 1970 года 00:00:00 по UTC. Этот метод полезен для установки значения даты из строкового значения, например, в сочетании с методом `setTime()` о объектом `Date`.

По данному строковому представлению времени метод `parse()` возвращает значение времени. Он принимает синтаксис даты из RFC2822 / IETF (RFC2822 раздел 3.3 — на английском, на русском), например, `"Mon, 25 Dec 1995 13:30:00 GMT"`. Он понимает аббревиатуры континентальных часовых поясов США, но для общего пользования используйте смещение часовых поясов, например, `"Mon, 25 Dec 1995 13:30:00 +0430"` (4 часа 30 минут к востоку от Гринвичского меридиана). Если часовой пояс не определён и строка является форматом ISO, распозначаемым ES5, предполагается, что часовым поясом является UTC. GMT и UTC считаются эквивалентными. Местный часовой пояс используется для интерпретации аргумента в формате RFC2822 из раздела 3.3 (на английском, на русском) (или в любом другом формате, не распознаваемым как ISO 8601 в ES5), если он не содержит информации о часовом поясе.

### Поддержка формата ISO-8601 в ECMAScript 5

Строка с датой и временем может быть в формате ISO 8601. Например, могут быть переданы и разобраны строки `"2011-10-10"` (только дата) или `"2011-10-10T14:48:00"` (дата и время). Для интерпретации аргументов в формате ISO 8601, не содержащих информацию о часовом поясе, используется часовой пояс UTC.

Хотя во время разбора строки с датой и используется спецификатор часового пояса, возвращаемое значение всегда содержит количество миллисекунд между 1 января 1970 года 00:00:00 по UTC и моментом времени, представленным аргументом.

Поскольку метод `parse()` является статическим методом объекта `Date`, вы всегда должны использовать его как `Date.parse()`.

### Различия в предполагаемом часовом поясе

Для строки даты `"March 7, 2014"`, метод `parse()` будет предполагать местный часовой пояс, но если строка дана в формате ISO, например `"2014-03-07"`, он будет предполагать, что часовой пояс равен UTC. Поэтому объекты `Date`, созданные из этих строк, если в системе местный часовой пояс не равен UTC, будут представлять разные моменты времени. Это значит, что две строки с датами, которые выглядят одинаковыми, могут дать два разных значения в зависимости от формата преобразуемой строки.

### Откат к зависимым от реализации форматам даты

В спецификации ECMAScript говорится: если строка не соответствует стандартному формату, функция может откатиться к любой зависимой от реализации эвристике, либо к зависимому от реализации алгоритму разбора. Нераспознанные строки, либо даты, содержащие недопустимые значения элементов в строках формата ISO, должны при вызове `Date.parse()` возвращать `NaN`.

Однако, недопустимые значения в строке даты, не распознанные как формат ISO, как определено ES5 могут возвращать, а могут и не возвращать `NaN` в качестве результата, в зависимости от браузера и предоставленных значений, например:

```js
// Строка не в формате ISO с недопустимыми значениями даты
new Date("23/25/2014");
```

будет рассматриваться как местная дата 25 ноября 2015 года в Firefox 30 и как недопустимая дата в Safari 7. Однако, если строка распознана как строка в формате ISO и она содержит недопустимые значения, метод вернёт `NaN` во всех браузерах, совместимых с ES5:

```js
// Строка в формате ISO с недопустимыми значениями даты
new Date("2014-25-23").toISOString();
// вернёт "RangeError: invalid date" во всех браузерах, совместимых с ES5
```

Реализация эвристики SpiderMonkey может быть найдена в файле `jsdate.cpp`. Строка `"10 06 2014"` является примером не подходящей под формат ISO и поэтому её разбор откатывается на пользовательскую подпрограмму. Так же смотрите эту грубую схему работы разбора строки.

```js
new Date("10 06 2014");
```

будет рассматриваться как местная дата 6 октября 2014 года, а не 10 июня 2014 года. Другие примеры:

```js
new Date("foo-bar 2014").toString();
// вернёт: "Invalid Date"

Date.parse("foo-bar 2014");
// вернёт: NaN
```

Примеры
-------

### Пример: использование метода `Date.parse()`

Если переменная `IPOdate` содержит существующий объект `Date`, она может быть установлена в 9 августа 1995 года (по местному времени) следующим способом:

```js
IPOdate.setTime(Date.parse("Aug 9, 1995"));
```

Ещё несколько примеров разбора нестандартных строк с датами:

```js
Date.parse("Aug 9, 1995");
```

Вернёт `807937200000` в часовом поясе GMT-0300, и другие значения в других часовых поясах, так как поскольку строка не определяет часовой пояс и не находится в формате ISO, то часовой пояс по умолчанию равен местному часовому поясу.

```js
Date.parse("Wed, 09 Aug 1995 00:00:00 GMT");
```

Вернёт `807926400000` вне зависимости от местного часового пояса, поскольку предоставлен спецификатор GMT (всемирное координированное время).

```js
Date.parse("Wed, 09 Aug 1995 00:00:00");
```

Вернёт `807937200000` в часовом поясе GMT-0300, и другие значения в других часовых поясах, так как поскольку строка не определяет часовой пояс и не находится в формате ISO, то часовой пояс по умолчанию равен местному часовому поясу.

```js
Date.parse("Thu, 01 Jan 1970 00:00:00 GMT");
```

Вернёт `0` вне зависимости от местного часового пояса, поскольку предоставлен спецификатор GMT (всемирное координированное время).

```js
Date.parse("Thu, 01 Jan 1970 00:00:00");
```

Вернёт `14400000` в часовом поясе GMT-0400, и другие значения в других часовых поясах, так как поскольку строка не определяет часовой пояс и не находится в формате ISO, то используется местный часовой пояс.

```js
Date.parse("Thu, 01 Jan 1970 00:00:00 GMT-0400");
```

Вернёт `14400000` вне зависимости от местного часового пояса, поскольку предоставлен спецификатор GMT (всемирное координированное время).

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-date.parse |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* `Date.UTC()`


Date.prototype.getDay() - JavaScript

Date.prototype.getDay()
=======================

Сводка
------

Метод **`getDay()`** возвращает порядковый номер дня недели указанной даты по местному времени, где 0 соответствует воскресенью.

Синтаксис
---------
```

dateObj.getDay()
```

### Параметры

Нет.

### Возвращаемое значение

Значение, возвращённое методом `getDay()`, является целым числом, соответствующим дню недели: 0 соответствует воскресенью, 1 — понедельнику, 2 — вторнику и так далее.

Примеры
-------

### Пример: использование метода `getDay()`

Вторая инструкция в примере ниже присваивает значение 1 переменной `weekday` из значения объекта `Date` `date`. 25 декабря 1995 года было понедельником.

```js
let date = new Date("December 25, 1995 23:15:30");
let weekday = date.getDay();

console.log(weekday); // 1
```

**Примечание:** При необходимости полное название дня (например, "`Понедельник`") можно получить, используя `Intl.DateTimeFormat` с параметром `options` parameter. С помощью этого метода упрощается интернационализация:

```js
let options = { weekday: "long" };

console.log(new Intl.DateTimeFormat("en-US", options).format(date));
// Monday

console.log(new Intl.DateTimeFormat("ru-RU", options).format(date));
// понедельник
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-date.prototype.getday |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* `Date.prototype.getUTCDate()`
* `Date.prototype.getUTCDay()`
* `Date.prototype.setDate()`


Date.prototype.setHours() - JavaScript

Date.prototype.setHours()
=========================

Сводка
------

Метод **`setHours()`** устанавливает часы указанной даты по местному времени и возвращает количество миллисекунд, прошедших с 1 января 1970 00:00:00 по UTC до времени, представляемого обновлённым экземпляром `Date`.

Синтаксис
---------
```

dateObj.setHours(hoursValue[, minutesValue[, secondsValue[, msValue]]])
```

### Версия до JavaScript 1.3
```

dateObj.setHours(hoursValue)
```

### Параметры

`hoursValue`

Целое число от 0 до 23, представляющее часы.

`minutesValue`

Необязательный параметр. Целое число от 0 до 59, представляющее минуты.

`secondsValue`

Необязательный параметр. Целое число от 0 до 59, представляющее секунды. Если вы определите параметр `secondsValue`, вы также должны определить параметр `minutesValue`.

`msValue`

Необязательный параметр. Целое число от 0 до 999, представляющее миллисекунды. Если вы определите параметр `msValue`, вы также должны определить параметры `minutesValue` и `secondsValue`.

Описание
--------

Если вы не определите значения параметров `minutesValue`, `secondsValue` и `msValue`, будут использоваться значения, возвращаемые методами `getMinutes()`, `getSeconds()` и `getMilliseconds()`.

Если значение определяемого параметра будет выходить за пределы ожидаемого диапазона, метод `setHours()` попытается соответственно обновить другие параметры и информацию о дате в объекте `Date`. Например, если в качестве `secondsValue` передать значение 100, минуты увеличатся на 1 (`minutesValue + 1`), а в качестве секунд будет использоваться значение 40.

Примеры
-------

### Пример: использование метода `setHours()`

```js
var theBigDay = new Date();
theBigDay.setHours(7);
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-date.prototype.sethours |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* `Date.prototype.getHours()`
* `Date.prototype.setUTCHours()`


Date.prototype.setTime() - JavaScript

Date.prototype.setTime()
========================

Сводка
------

Метод **`setTime()`** устанавливает время объекта `Date` в значение, представляемое количеством миллисекунд, прошедших с 1 января 1970 00:00:00 по UTC.

Синтаксис
---------
```

dateObj.setTime(timeValue)
```

### Параметры

`timeValue`

Целое число, представляющее количеством миллисекунд, прошедших с 1 января 1970 00:00:00 по UTC.

Описание
--------

Используя метод `setTime()`, можно присвоить дату и время другому объекту `Date`.

Примеры
-------

### Пример: использование метода `setTime()`

```js
var theBigDay = new Date("July 1, 1999");
var sameAsBigDay = new Date();
sameAsBigDay.setTime(theBigDay.getTime());
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-date.prototype.settime |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* `Date.prototype.getTime()`
* `Date.prototype.setUTCHours()`


Date.prototype.toString() - JavaScript

Date.prototype.toString()
=========================

Сводка
------

Метод **`toString()`** возвращает строковое представление указанного объекта `Date`.

Синтаксис
---------
```

dateObj.toString()
```

### Параметры

Нет.

Описание
--------

Объект `Date` переопределяет метод `toString()`, унаследованный из объекта `Object`; он не наследует метод `Object.prototype.toString()`. Для объектов `Date` метод `toString()` возвращает строковое представление объекта.

Метод `toString()` всегда возвращает строковое представление даты на американском английском.

JavaScript вызывает метод `toString()` автоматически, когда дата представляется как текст, или когда дата участвует в конкатенации строк.

Примеры
-------

### Пример: использование метода `toString()`

В следующем примере переменной `myVar` присваивается значение, возвращённое методом `toString()` объекта `Date`:

```js
var x = new Date();
myVar = x.toString(); // присваивает переменной myVar значение вроде:
// Mon Sep 28 1998 14:36:22 GMT-0700 (Pacific Daylight Time)
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-date.prototype.tostring |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* `Object.prototype.toString()`
* `Date.prototype.toDateString()`
* `Date.prototype.toLocaleString()`
* `Date.prototype.toTimeString()`


Date.prototype.setUTCDate() - JavaScript

Date.prototype.setUTCDate()
===========================

Сводка
------

Метод **`setUTCDate()`** устанавливает день месяца указанной даты по всемирному координированному времени.

Синтаксис
---------
```

dateObj.setUTCDate(dayValue)
```

### Параметры

`dayValue`

Целое число от 1 до 31, представляющее номер дня в месяце.

Описание
--------

Если значение параметра `dayValue` будет выходить за пределы количества дней для месяца, метод `setUTCDate()` попытается соответственно обновить объект `Date`. Например, если в качестве `dayValue` передать значение 40, а текущий сохранённый в объекте `Date` месяц равен июню, день будет изменён на 10, а месяц увеличится до июля.

Примеры
-------

### Пример: использование метода `setUTCDate()`

```js
var theBigDay = new Date();
theBigDay.setUTCDate(20);
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-date.prototype.setutcdate |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* `Date.prototype.getUTCDate()`
* `Date.prototype.setDate()`


Date.prototype.getUTCMinutes() - JavaScript

Date.prototype.getUTCMinutes()
==============================

Сводка
------

Метод **`getUTCMinutes()`** возвращает минуты указанной даты по всемирному координированному времени.

Синтаксис
---------
```

dateObj.getUTCMinutes()
```

### Параметры

Нет.

### Возвращаемое значение

Значение, возвращённое методом `getUTCMinutes()`, является целым числом от 0 до 59.

Примеры
-------

### Пример: использование метода `getUTCMinutes()`

В следующем примере переменной `minutes` присваивается количество минут из текущего времени.

```js
var today = new Date();
var minutes = today.getUTCMinutes();
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-date.prototype.getutcminutes |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* `Date.prototype.getMinutes()`
* `Date.prototype.setUTCMinutes()`


Date.prototype.getUTCFullYear() - JavaScript

Date.prototype.getUTCFullYear()
===============================

Сводка
------

Метод **`getUTCFullYear()`** возвращает год указанной даты по всемирному координированному времени.

Синтаксис
---------
```

dateObj.getUTCFullYear()
```

### Параметры

Нет.

### Возвращаемое значение

Значение, возвращённое методом `getUTCFullYear()` является абсолютным числом, совместимым с проблемой 2000 года, например, 1995.

Примеры
-------

### Пример: использование метода `getUTCFullYear()`

В следующем примере переменной `year` присваивается четырёхзначное значение текущего года.

```js
var today = new Date();
var year = today.getUTCFullYear();
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-date.prototype.getutcfullyear |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* `Date.prototype.getFullYear()`
* `Date.prototype.setFullYear()`


Date.prototype.setUTCHours() - JavaScript

Date.prototype.setUTCHours()
============================

Сводка
------

Метод **`setUTCHours()`** устанавливает часы указанной даты по всемирному координированному времени и возвращает количество миллисекунд, прошедших с 1 января 1970 00:00:00 по UTC до времени, представляемого обновлённым экземпляром `Date`.

Синтаксис
---------
```

dateObj.setUTCHours(hoursValue[, minutesValue[, secondsValue[, msValue]]])
```

### Параметры

`hoursValue`

Целое число от 0 до 23, представляющее часы.

`minutesValue`

Необязательный параметр. Целое число от 0 до 59, представляющее минуты.

`secondsValue`

Необязательный параметр. Целое число от 0 до 59, представляющее секунды. Если вы определите параметр `secondsValue`, вы также должны определить параметр `minutesValue`.

`msValue`

Необязательный параметр. Целое число от 0 до 999, представляющее миллисекунды. Если вы определите параметр `msValue`, вы также должны определить параметры `minutesValue` и `secondsValue`.

Описание
--------

Если вы не определите значения параметров `minutesValue`, `secondsValue` и `msValue`, будут использоваться значения, возвращаемые методами `getUTCMinutes()`, `getUTCSeconds()` и `getUTCMilliseconds()`.

Если значение определяемого параметра будет выходить за пределы ожидаемого диапазона, метод `setUTCHours()` попытается соответственно обновить другие параметры и информацию о дате в объекте `Date`. Например, если в качестве `secondsValue` передать значение 100, минуты увеличатся на 1 (`minutesValue + 1`), а в качестве секунд будет использоваться значение 40.

Примеры
-------

### Пример: использование метода `setUTCHours()`

```js
var theBigDay = new Date();
theBigDay.setUTCHours(8);
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-date.prototype.setutchours |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* `Date.prototype.getUTCHours()`
* `Date.prototype.setHours()`


Date.now() - JavaScript

Date.now()
==========

Сводка
------

Метод **`Date.now()`** возвращает количество миллисекунд, прошедших с 1 января 1970 года 00:00:00 по UTC.

Синтаксис
---------
```

var timeInMs = Date.now();
```

### Параметры

Нет.

Описание
--------

Метод `now()` возвращает количество миллисекунд, прошедших с 1 января 1970 года 00:00:00 по UTC по текущий момент времени в качестве числа.

Поскольку метод `now()` является статическим методом объекта `Date`, вы всегда должны использовать его как `Date.now()`.

Полифил
-------

Этот метод был стандартизирован в ECMA-262 5-го издания. Отсутствие этого метода в движках, которые не были обновлены для его поддержки, можно обойти следующей прокладкой:

```js
if (!Date.now) {
  Date.now = function now() {
    return new Date().getTime();
  };
}
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-date.now |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* `Performance.now()` — предоставляет временные метки с разрешением в доли миллисекунд для использования при измерении производительности веб-страницы
* `console.time()` / `console.timeEnd()`


Date.prototype.getUTCDay() - JavaScript

Date.prototype.getUTCDay()
==========================

Сводка
------

Метод **`getUTCDay()`** возвращает день недели указанной даты по всемирному координированному времени, где 0 соответствует воскресенью.

Синтаксис
---------
```

dateObj.getUTCDay()
```

### Параметры

Нет.

### Возвращаемое значение

Значение, возвращённое методом `getDay()`, является целым числом, соответствующим дню недели: 0 соответствует воскресенью, 1 — понедельнику, 2 — вторнику и так далее.

Примеры
-------

### Пример: использование метода `getUTCDay()`

В следующем примере переменной `weekday` присваивается номер дня недели из текущей даты.

```js
var today = new Date();
var weekday = today.getUTCDay();
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-date.prototype.getutcday |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* `Date.prototype.getUTCDate()`
* `Date.prototype.getDay()`
* `Date.prototype.setUTCDate()`


Date.prototype.getYear() - JavaScript

Date.prototype.getYear()
========================

**Устарело:** Эта возможность была удалена из веб-стандартов. Хотя некоторые браузеры по-прежнему могут поддерживать её, она находится в процессе удаления. Не используйте её ни в старых, ни в новых проектах. Страницы или веб-приложения, использующие её, могут в любой момент сломаться.

Сводка
------

Метод **`getYear()`** возвращает год указанной даты по местному времени. Поскольку метод `getYear()` не возвращает полный год («проблема 2000 года»), он больше не используется и был заменён методом `getFullYear()`.

Синтаксис
---------
```

dateObj.getYear()
```

### Параметры

Нет.

### Возвращаемое значение

Метод `getYear()` возвращает год минус 1900; таким образом:

* Для годов, больших, либо равных 2000, значение, возвращённое методом `getYear()`, будет равно 100 или выше. Например, если год равен 2026, метод `getYear()` вернёт 126.
* Для годов между 1900 и 1999 включительно, значение, возвращённое методом `getYear()`, лежит между 0 и 99. Например, если год равен 1976, метод `getYear()` вернёт 76.
* Для годов, меньших 1900, значение, возвращённое методом `getYear()`, будем меньше 0. Например, если год равен 1800, метод `getYear()` вернёт -100.

Чтобы учесть года до и после 2000, вы должны вместо метода `getYear()` использовать метод `getFullYear()`, который возвращает полный год.

Обратная совместимость
----------------------

### Поведение в JavaScript 1.2 и ранее

Метод `getYear()` возвращал 2-х или 4-х значный год:

* Для годов между 1900 и 1999 включительно, значение, возвращаемое методом `getYear()`, было годом минус 1900. Например, если год равнялся 1976, возвращаемое значение равнялось 76.
* Для годов, меньших 1900, либо больших 1999, значение, возвращаемое методом `getYear()` было четырёхзначным годом. Например, если год равнялся 1856, возвращаемое значение равнялось 1856. Если год равнялся 2026, возвращаемое значение равнялось 2026.
Примеры
-------

### Пример: года между 1900 и 1999

Вторая инструкция присваивает значение 95 переменной `year`.

```js
var Xmas = new Date("December 25, 1995 23:15:00");
var year = Xmas.getYear(); // вернёт 95
```

### Пример: года после 1999

Вторая инструкция присваивает значение 100 переменной `year`.

```js
var Xmas = new Date("December 25, 2000 23:15:00");
var year = Xmas.getYear(); // вернёт 100
```

### Пример: года до 1900

Вторая инструкция присваивает значение -100 переменной `year`.

```js
var Xmas = new Date("December 25, 1800 23:15:00");
var year = Xmas.getYear(); // вернёт -100
```

### Пример: установка и получение года между 1900 и 1999

Вторая инструкция присваивает значение 95 переменной `year`, которое представляет 1995 год.

```js
var Xmas.setYear(95);
var year = Xmas.getYear(); // вернёт 95
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-date.prototype.getyear |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* `Date.prototype.getFullYear()`
* `Date.prototype.getUTCFullYear()`
* `Date.prototype.setYear()`


Date.prototype.toDateString() - JavaScript

Date.prototype.toDateString()
=============================

Сводка
------

Метод **`toDateString()`** возвращает часть, содержащую только дату объекта `Date` в виде человеко-читаемой строки на американском английском.

Синтаксис
---------
```

dateObj.toDateString()
```

Описание
--------

Экземпляры объекта `Date` ссылаются на определённый момент времени. Вызов метода `toString()` вернёт дату, отформатированную в виде человеко-читаемой строки на американском английском. В SpiderMonkey она состоит из части, содержащей дату (день, месяц и год) и следующей за ней части, содержащей время (часы, минуты, секунды и часовой пояс). Иногда желательно получить строку, содержащую только часть с датой; этого можно достигнуть использованием метода `toDateString()`.

Метод `toDateString()` полезен тем, что совместимые движки, реализующие ECMA-262 (en-US) могут давать разные строки с помощью метода `toString()` объекта `Date`, поскольку формат строки зависит от реализации и простой подход с разрезанием строки на дату и время может не всегда сработать.

Примеры
-------

### Пример: базовое использование метода `toDateString()`

```js
var d = new Date(1993, 6, 28, 14, 39, 7);

console.log(d.toString()); // напечатает Wed Jul 28 1993 14:39:07 GMT-0600 (PDT)
console.log(d.toDateString()); // напечатает Wed Jul 28 1993
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-date.prototype.todatestring |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* `Date.prototype.toLocaleDateString()`
* `Date.prototype.toTimeString()`
* `Date.prototype.toString()`


ArrayBuffer.isView() - JavaScript

ArrayBuffer.isView()
====================

Метод `ArrayBuffer.isView(arg)` возвращает `true`, если `arg` является одним из таких видов `ArrayBuffer`, как типизированные массивы или `DataView`; в ином случае возвращает `false`.

Интерактивный пример
--------------------

Синтаксис
---------
```

ArrayBuffer.isView(arg)
```

### Параметры

`arg`

Проверяемое значение.

### Возвращаемое значение

`true`, если переданный аргумент является одним из видов `ArrayBuffer`; в противном случае `false`.

Примеры
-------

```js
ArrayBuffer.isView(); // false
ArrayBuffer.isView([]); // false
ArrayBuffer.isView({}); // false
ArrayBuffer.isView(null); // false
ArrayBuffer.isView(undefined); // false
ArrayBuffer.isView(new ArrayBuffer(10)); // false

ArrayBuffer.isView(new Uint8Array()); // true
ArrayBuffer.isView(new Float32Array()); // true
ArrayBuffer.isView(new Int8Array(10).subarray(0, 3)); // true

var buffer = new ArrayBuffer(2);
var dv = new DataView(buffer);
ArrayBuffer.isView(dv); // true
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-arraybuffer.isview |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* Типизированные массивы JavaScript


ArrayBuffer.prototype.slice() - JavaScript

ArrayBuffer.prototype.slice()
=============================

Метод **`slice()`** вернёт новый `ArrayBuffer`, содержимое которого, будет копией содержимого, содержащегося в исходом ArrayBuffer, начиная с begin (включительно), и до end(не включая).

Syntax
------
```

arraybuffer.slice(begin[, end])
```

### Parameters

`begin`

Указывает с какого индекса начинать slice, начинается с нуля.

`end`

Указывает до какого индекса делать slice. Если не указан - slice будет выполнен до конца `ArrayBuffer. Разница между begin и end должна быть положительной и быть не более длины ArrayBuffer, в противном случае будет выставлен 0.`

### Return value

Новый объект `ArrayBuffer`.

Description
-----------

Метод `slice` копирует, до индекса в параметре end (не включительно) . В случае если `begin` или `end` негативен, то индекс считается с конца массива.

Examples
--------

### Копируем `ArrayBuffer`

```js
var buf1 = new ArrayBuffer(8);
var buf2 = buf1.slice(0);
```

Specifications
--------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-arraybuffer.prototype.slice |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

See also
--------

* `ArrayBuffer`


SyntaxError: Unexpected token - JavaScript

SyntaxError: Unexpected token
=============================

Сообщение
---------
```

SyntaxError: expected expression, got "x"
SyntaxError: expected property name, got "x"
SyntaxError: expected target, got "x"
SyntaxError: expected rest argument name, got "x"
SyntaxError: expected closing parenthesis, got "x"
SyntaxError: expected '=>' after argument list, got "x"
```

Тип ошибки
----------

`SyntaxError`Что пошло не так?
-----------------

Вместо определённой конструкции языка было использовано что-то другое. Возможно, просто опечатка.

Примеры
-------

### Ожидаемое выражение

Недопустимыми являются, к примеру, запятые после элементов цепочки выражений.

```js
for (let i = 0; i < 5,; ++i) {
  console.log(i);
}
// SyntaxError: expected expression, got ';'
```

Правильным вариантом будет убрать запятую или добавить ещё одно выражение:

```js
for (let i = 0; i < 5; ++i) {
  console.log(i);
}
```

### Недостаточно скобок

Иногда можно потерять скобки при использовании `if`:

```js
function round(n, upperBound, lowerBound){
  if(n > upperBound) || (n < lowerBound){
    throw 'Число ' + String(n) + ' больше, чем ' + String(upperBound) + ', или меньше, чем ' + String(lowerBound);
  }else if(n < ((upperBound + lowerBound)/2)){
    return lowerBound;
  }else{
    return upperBound;
  }
} // SyntaxError: expected expression, got '||'
```

На первый взгляд кажется, что скобки расставлены правильно, но обратите внимание, что `||` находится не в скобках. Необходимо заключить `||` в скобки:

```js
function round(n, upperBound, lowerBound) {
  if (n > upperBound || n < lowerBound) {
    throw (
      "Число " +
      String(n) +
      " больше, чем " +
      String(upperBound) +
      ", или меньше, чем " +
      String(lowerBound)
    );
  } else if (n < (upperBound + lowerBound) / 2) {
    return lowerBound;
  } else {
    return upperBound;
  }
}
```


URIError: malformed URI sequence - JavaScript

URIError: malformed URI sequence
================================

Сообщение
---------
```

URIError: malformed URI sequence (Firefox)
URIError: URI malformed (Chrome)
```

Тип ошибки
----------

`URIError`Что пошло не так?
-----------------

Декодирование или кодирование URI не было успешным. Аргумент переданный функциям `decodeURI`, `encodeURI`, `encodeURIComponent`, или `decodeURIComponent` был недопустимым, из-за этого функция не смогла выполнить кодирование или декодирование.

Примеры
-------

### Кодирование

Кодирование заменяет каждое вхождение конкретного символа одним, двумя, тремя или четырьмя управляющими последовательностями, представленными стандартом UTF-8. `URIError` возникнет, при попытке кодирования суррогата, не являющегося частью high-low пары, например:

```js
encodeURI("\uD800");
// "URIError: malformed URI sequence"

encodeURI("\uDFFF");
// "URIError: malformed URI sequence"
```

Нормальная high-low пара. Например:

```js
encodeURI("\uD800\uDFFF");
// "%F0%90%8F%BF"
```

### Декодирование

Декодирование заменяет каждую управляющую последовательность в закодированном URI компоненте символом, который она представляет. Если такого символа нет, возникнет ошибка:

```js
decodeURIComponent("%E0%A4%A");
// "URIError: malformed URI sequence"
```

Правильный вариант обычно выглядит так:

```js
decodeURIComponent("JavaScript\_%D1%88%D0%B5%D0%BB%D0%BB%D1%8B");
// "JavaScript\_шеллы"
```

Смотрите также
--------------

* `URIError`
* `decodeURI`
* `encodeURI`
* `encodeURIComponent`
* `decodeURIComponent`


TypeError: "x" is read-only(Ошибка Типа: "x" только для чтения) - JavaScript

TypeError: "x" is read-only(Ошибка Типа: "x" только для чтения)
===============================================================

Сообщения
---------
```

TypeError: назначение свойств только для чтения не допускается в строгом режиме (Edge)
TypeError: "x" доступен только для чтения (Firefox)
TypeError: 0 доступен только для чтения (Firefox)
TypeError: не удаётся назначить только для чтения свойство "x" из #<объект> (Chrome)
TypeError: не удаётся назначить только для чтения свойство '0' [массив объектов] (Chrome)
```

Тип ошибки
----------

`TypeError`Что пошло не так?
-----------------

Назначенное свойство глобальной переменной или объекта является свойством только для чтения. (Технически это свойство данных, недоступное для записи.)

Эта ошибка возникает только в коде строгого режима. В нестрогом коде назначение игнорируется.

Примеры
-------

### недействительные кейсы

Свойства только для чтения не очень распространены, но их можно создать с помощью `Object.defineProperty()` или `Object.freeze()`.

```js
"use strict";
var obj = Object.freeze({ name: "Elsa", score: 157 });
obj.score = 0; // TypeError

("use strict");
Object.defineProperty(this, "LUNG\_COUNT", { value: 2, writable: false });
LUNG\_COUNT = 3; // TypeError

("use strict");
var frozenArray = Object.freeze([0, 1, 2]);
frozenArray[0]++; // TypeError
```

В JavaScript также встроено несколько свойств, доступных только для чтения. Возможно, вы пытались переопределить математическую константу.

```js
"use strict";
Math.PI = 4; // TypeError
```

Прости, ты не можешь этого сделать.

Глобальная переменная undefined также доступна только для чтения, поэтому вы не можете заставить замолчать печально известную ошибку "undefined is not a function:

```js
"use strict";
undefined = function () {}; // TypeError: "undefined" доступен только для чтения
```

### Правильные кейсы

```js
"use strict";
var obj = Object.freeze({ name: "Score", points: 157 });
obj = { name: obj.name, points: 0 }; // замена его на новый работающий объект

("use strict");
var LUNG\_COUNT = 2; // "var` работает, потому что он не только для чтения
LUNG\_COUNT = 3; // ok (анатомически маловероятно, хотя)
```

Смотрите также
--------------

* `Object.defineProperty()`
* `Object.freeze()`


SyntaxError: missing } after function body - JavaScript

SyntaxError: missing } after function body
==========================================

Сообщение
---------
```

SyntaxError: missing } after function body
```

Тип ошибки
----------

`SyntaxError`Что пошло не так?
-----------------

Допущена синтаксическая ошибка где-то в коде создания функции. Кроме того, проверьте, все ли закрывающие круглые и фигурные скобки расставлены в правильном порядке. Справиться с беспорядком поможет использование отступов, а также более аккуратное форматирование кода в целом.

Примеры
-------

### Забытая закрывающая фигурная скобка

Часто в коде функции может быть забыта фигурная скобка:

```js
var charge = function() {
  if (sunny) {
    useSolarCells();
  } else {
    promptBikeRide();
};
```

Правильный код:

```js
var charge = function () {
  if (sunny) {
    useSolarCells();
  } else {
    promptBikeRide();
  }
};
```

Ещё больше путаницы может внести использование IIFE, замыканий и прочих конструкций, где используется большое количество различных скобок:

```js
(function() { if (true) { return false; } );
```

Зачастую облегчить поиск ошибок можно, проверив отступы ещё раз или расставив их по-другому.

```js
(function () {
  if (true) {
    return false;
  }
});
```

Смотрите также
--------------

* Функции


Синтаксическая ошибка: пропущенный символ ")" после списка аргументов - JavaScript

Синтаксическая ошибка: пропущенный символ ")" после списка аргументов
=====================================================================

Сообщение
---------
```

Синтаксическая ошибка: пропущенный символ ")" после списка аргументов
```

Тип ошибки
----------

`SyntaxError`.

Причина возникновения ошибки
----------------------------

Ошибка в вызове функции. Например, опечатка, пропущенный оператор, или некорректно обрамлённая кавычками строка.

Примеры
-------

Из-за отсутствия оператора конкатенации "+", JavaScript ожидает аргумент функции `log` просто `"PI: "`. В этом случае, он должен быть заключён в закрывающие скобки.

```js
console.log('PI: ' Math.PI);
// SyntaxError: missing ) after argument list
```

Можно скорректировать вызов функции `log` добавлением оператора "`+`":

```js
console.log("PI: " + Math.PI);
// "PI: 3.141592653589793"
```

Смотрите также
--------------

* Функции


X.prototype.y called on incompatible type - JavaScript

X.prototype.y called on incompatible type
=========================================

Сообщение
---------
```

TypeError: 'this' не является  Set объектом (EdgE)
TypeError: Function.prototype.toString вызывается несовместимый объект (Firefox)
TypeError: Function.prototype.bind вызывается несовместимая цель (Firefox)
TypeError: Метод Set.prototype.add called вызывается несовместимый приёмник undefined (Chrome)
TypeError: Bind должен вызываться для функции(Chrome)
```

Тип ошибки
----------

`TypeError`Что пошло не так?
-----------------

При возникновении этой ошибки вызывается функция (для данного объекта) с типом this, не соответствующим типу, ожидаемому функцией.

Эта проблема может возникнуть при использовании `Function.prototype.call()` ил `Function.prototype.apply()` методы и предоставление аргумента this, который не имеет ожидаемого типа.

Эта проблема также может возникнуть при предоставлении функции (хранящейся в объекте) в качестве аргумента другой функции. В этом случае объект не будет целью this функции. Чтобы обойти эту проблему, необходимо либо предоставить лямбда-код, который выполняет вызов, либо использовать`Function.prototype.bind()` функция для принудительной передачи аргумента this ожидаемому объекту.

Примеры
-------

### Неправильные

```js
var mySet = new Set();
["bar", "baz"].forEach(mySet.add);
// mySet.add is a function, but "mySet" is not captured as this.

var myFun = function () {
  console.log(this);
};
["bar", "baz"].forEach(myFun.bind);
// myFun.bind is a function, but "myFun" is not captured as this.
```

### Правильные

```js
var mySet = new Set();
["bar", "baz"].forEach(mySet.add.bind(mySet));
// This works due to binding "mySet" as this.

var myFun = function () {
  console.log(this);
};
["bar", "baz"].forEach((x) => myFun.bind(x));
// This works using the "bind" function. It creates a lambda forwarding the argument.
```

Смотрите также
--------------

* `Function.prototype.call()`
* `Function.prototype.apply()`
* `Function.prototype.bind()`


TypeError: can't assign to property "x" on "y": not an object - JavaScript

TypeError: can't assign to property "x" on "y": not an object
=============================================================

Ошибка строгого режима JavaScript "can't assign to property" ("невозможно присвоить свойство") происходит в тот момент, когда вы пытаетесь создать свойство примитивного типа данных (такого как символ, строка, число или булевое значение). Примитивные типы данных не могут содержать никаких свойств.Message
-------
```

TypeError: can't assign to property "x" on {y}: not an object> (Firefox)
TypeError: Cannot create property 'x' on {y} (Chrome)
```

Error type
----------

`TypeError`.

What went wrong?
----------------

In `Strict_mode`, a `TypeError` is raised when attempting to create a property on primitive value such as a symbol (en-US), a string, a number or a boolean. Primitive values cannot hold any property (en-US).

The problem might be that an unexpected value is flowing at an unexpected place, or that an object variant of a `String` or a `Number` is expected.

Examples
--------

### Invalid cases

```js
"use strict";

var foo = "my string";
// The following line does nothing if not in strict mode.
foo.bar = {}; // TypeError: can't assign to property "bar" on "my string": not an object
```

### Fixing the issue

Either fix the code to prevent the primitive from being used in such places, or fix the issue is to create the object equivalent `Object`.

```js
"use strict";

var foo = new String("my string");
foo.bar = {};
```

See also
--------

* `Strict_mode`
* primitive


SyntaxError: "use strict" not allowed in function with non-simple parameters - JavaScript

SyntaxError: "use strict" not allowed in function with non-simple parameters
============================================================================

Сообщение
---------
```

Edge:
Cannot apply strict mode on functions with non-simple parameter list

Firefox:
SyntaxError: "use strict" not allowed in function with default parameter
SyntaxError: "use strict" not allowed in function with rest parameter
SyntaxError: "use strict" not allowed in function with destructuring parameter

Chrome:
SyntaxError: Illegal 'use strict' directive in function with non-simple parameter list
```

Перевод:
```

Edge:
Не удаётся применить строгий режим к функциям со списком, содержащим сложные параметры

Firefox:
Ошибка синтаксиса: "use strict" не допускается в функции с параметром по умолчанию
Ошибка синтаксиса: "use strict" не допускается в функции с rest параметром
Ошибка синтаксиса: "use strict" не допускается в функции с параметром, использующим деструктуризацию

Chrome:
Ошибка синтаксиса: недопустимая директива 'use strict' в функции со списком, содержащим сложные параметры
```

Тип ошибки
----------

`SyntaxError`.

Что пошло не так?
-----------------

Директива `"use strict"` была использована в верхней части функции, которая имеет один из следующих параметров:

* параметры по умолчанию
* остальные параметры
* деконструкция параметров

Директива "use strict" не допускается в верхней части таких функций согласно спецификации ECMAScript.

Примеры
-------

### Функция заявления

В этом случае функция sum имеет параметры по умолчанию a=1 и b=2:

```js
function sum(a = 1, b = 2) {
  //SyntaxError: использовать "use strict" не разрешено в функции с параметром по умолчанию
  'use strict';
  return a + b;
}
```

Если функция должна находиться в строгом режиме, и весь скрипт или заключающая функция также в порядке, чтобы быть в строгом режиме, вы можете переместить директиву "use strict" за пределы функции:

```js
"use strict";
function sum(a = 1, b = 2) {
  return a + b;
}
```

### Функция выражения

Выражение функции может использовать ещё один обходной путь:

```js
var sum = function sum([a, b]) {
  // SyntaxError: "use strict" не допускается в функции с параметром деструктурирования
  'use strict';
  return a + b;
};
```

Это может быть преобразовано в следующее выражение:

```js
var sum = (function () {
  "use strict";
  return function sum([a, b]) {
    return a + b;
  };
})();
```

### Указательная функция

Если функция со стрелкой должна получить доступ к переменной this, можно использовать функцию со стрелкой в качестве функции включения:

```js
var callback = (...args) => {
  // SyntaxError: "use strict" не допускается в функции с параметром rest
  'use strict';
  return this.run(args);
};
```

Это может быть преобразовано в следующее выражение:

```js
var callback = (() => {
  "use strict";
  return (...args) => {
    return this.run(args);
  };
})();
```

Смотрите также
--------------

* строгий режим
* оператор function
* свободное выражение функции
* параметры по умолчанию
* остальные параметры
* деконструкция параметры


SyntaxError: missing ) after condition - JavaScript

SyntaxError: missing ) after condition
======================================

Сообщение
---------
```

SyntaxError: missing ) after condition
```

Тип ошибки
----------

`SyntaxError`Что пошло не так?
-----------------

Произошла ошибка в написании условия if. В любом языке программирования код принимает решение выполнять действия в зависимости от входных параметров. Оператор if выполняет действия, если условие истинно. В JavaScript это условие должно заключаться в скобки после ключевого слова if, например:

```js
if (condition) {
  // сделать что-то если условие истинно
}
```

Примеры
-------

Это может быть просто недосмотр, внимательно проверьте все скобки в коде.

```js
if (3 > Math.PI {
  console.log("Что?");
}

// SyntaxError: missing ) after condition
```

Чтобы исправить ошибку вы должны поставить закрывающую скобку после условия.

```js
if (3 > Math.PI) {
  console.log("Что?");
}
```

Если вы пришли из других языков программирования, то можете случайно использовать ключевые слова, которые в JavaScript обозначают что-то другое или вообще не имеют смысла.

```js
if (done is true) {
 console.log("мы сделали!");
}

// SyntaxError: missing ) after condition
```

Вместо этого используйте нужный оператор сравнения. Для примера:

```js
if (done === true) {
  console.log("мы сделали!");
}
```

Смотрите также
--------------

* `if...else`
* Операторы сравнения
* Making decisions in your code — conditionals


SyntaxError: "0"-prefixed octal literals and octal escape seq. are deprecated - JavaScript

SyntaxError: "0"-prefixed octal literals and octal escape seq. are deprecated
=============================================================================

Сообщение
---------
```

SyntaxError: Octal numeric literals and escape characters not allowed in strict mode (Edge)
SyntaxError: "0"-prefixed octal literals and octal escape sequences are deprecated;
for octal literals use the "0o" prefix instead
```

Перевод:
```

Ошибка синтаксиса: Восьмеричные числовые литералы и escape-последовательности, не разрешены в строгом режиме (Edge)
Ошибка синтаксиса: восьмеричные литералы с префиксом "0", и восьмеричные escape-последовательности считаются устаревшими;
для восьмеричных литералов используйте префикс "0o"
```

Тип ошибки
----------

`SyntaxError` только в строгом режиме.

Что пошло не так?
-----------------

Восьмеричные литералы и восьмеричные escape-последовательности являются устаревшими и будут выдавать `SyntaxError` в строгом режиме. С ECMAScript2015 стандартным синтаксисом является использование ведущего нуля с последующей заглавной или строчной латинской буквой "O" (`0o` или `0O`)

Примеры
-------

### "0"-prefixed octal literals (восьмеричные литералы с префиксом "0")

```js
"use strict";

03;

// Ошибка синтаксиса: восьмеричные литералы с префиксом "0" и восьмеричные escape-последовательности считаются устаревшими
```

### Octal escape sequences (Восьмеричные escape-последовательности)

```js
"use strict";

"\251";

// SyntaxError: восьмеричные литералы с префиксом "0" и восьмеричные escape-последовательности считаются устаревшими
```

### Valid octal numbers (Допустимые восьмеричные числа)

Используйте ноль с последующей латинской буквой "o" или "O".

```js
0o3;
```

Вместо escape-последовательностей можно использовать шестнадцатеричные escape-последовательности:

```js
"\xA9";
```

Смотрите также
--------------

* Lexical grammar(Лексическая грамматика)
* Warning: 08/09 is not a legal ECMA-262 octal constant (en-US)(Предупреждение: 08/09 нет законной восьмиштырьковой константы ECMA-262)


TypeError: can't redefine non-configurable property "x" - JavaScript

TypeError: can't redefine non-configurable property "x"
=======================================================

Исключение "can't redefine non-configurable property" возникает, когда в коде переопределяется ненастраиваемое свойство.

Сообщения
---------
```

TypeError: Cannot redefine property: "x" (V8-based)
TypeError: can't redefine non-configurable property "x" (Firefox)
TypeError: Attempting to change value of a readonly property. (Safari)
```

Тип ошибки
----------

`TypeError`Что не так?
-----------

Была предпринята попытка переопределить свойство, но это свойство не настраивается. Атрибут "настраиваемости" определяет, можно ли удалить свойство из объекта и можно ли изменить другие его атрибуты (отличные от доступных для записи). Обычно, свойства объекта, созданного инициализатором объекта, настраиваются. Однако, например, при использовании `Object.defineProperty()`, заданное свойство по умолчанию ненастраиваемое.

Примеры
-------

### Ненастраиваемые свойства, созданные `Object.defineProperty`

The `Object.defineProperty()` создаёт ненастраиваемые свойства, если они не помечены как настраиваемые.

```js
const obj = Object.create({});
Object.defineProperty(obj, "foo", { value: "bar" });

Object.defineProperty(obj, "foo", { value: "baz" });
// TypeError: can't redefine non-configurable property "foo"
```

Вам нужно будет пометить свойство "foo" как настраиваемое (`configurable: true`), если вы собираетесь переопределить его позже в коде.

```js
const obj = Object.create({});
Object.defineProperty(obj, "foo", { value: "bar", configurable: true });
Object.defineProperty(obj, "foo", { value: "baz", configurable: true });
```

Смотрите также
--------------

* [[Configurable]]
* `Object.defineProperty()`


SyntaxError: missing } after property list - JavaScript

SyntaxError: missing } after property list
==========================================

Сообщение
---------
```

SyntaxError: missing } after property list
```

Тип ошибки
----------

`SyntaxError`Что пошло не так?
-----------------

Произошла ошибка в синтаксисе инициализатора объекта. Причиной может быть отсутствующая фигурная скобка или, к примеру, недостающая запятая. Также проверьте, в правильном ли порядке расположены закрывающие круглые и фигурные скобки. Добавление отступов или форматирование кода в более благоприятный вид также могут помочь разобраться в беспорядке.

Примеры
-------

### Забытая запятая

Зачастую в коде инициализатора объекта есть недостающая запятая:

```js
var obj = {
  a: 1,
  b: { myProp: 2 }
  c: 3
};
```

Правильный вариант:

```js
var obj = {
  a: 1,
  b: { myProp: 2 },
  c: 3,
};
```

Смотрите также
--------------

* Инициализация объектов


TypeError: cyclic object value - JavaScript

TypeError: cyclic object value
==============================

Сообщения
---------
```

TypeError: циклическое значение объекта (Firefox)
TypeError: преобразование круговой структуры в JSON (Chrome и Opera)
TypeError: циклическая ссылка в аргументе значения не поддерживается (Edge)
```

Тип ошибки?
-----------

`TypeError`Что не так?
-----------

Сам по себе JSON-формат не поддерживает ссылки на объекты (не смотря на то что существует IETF, который позволяет значению JSON ссылаться на другое значение в JSON-документе), поэтому `JSON.stringify()` не пытаеться их анализировать и терпит неудачу при попытке сделать это.

Примеры
-------

В круговой структуре как эта

```js
var circularReference = { otherData: 123 };
circularReference.myself = circularReference;
```

`JSON.stringify()` закончится неудачей

```js
JSON.stringify(circularReference);
// TypeError: циклическое значение объекта
```

Для сериализации циклических ссылок можно использовать библиотеку, которая их поддерживает (например, cycle.js) или самостоятельно реализовать решение, которое потребует поиска и замены (или удаления) циклических ссылок сериализуемыми значениями.

Во фрагменте кода ниже показано, как найти и отфильтровать циклическую ссылку (что приводит к потере данных) с помощью параметра `replacer``JSON.stringify()`:

```js
const getCircularReplacer = () => {
  const seen = new WeakSet();
  return (key, value) => {
    if (typeof value === "object" && value !== null) {
      if (seen.has(value)) {
        return;
      }
      seen.add(value);
    }
    return value;
  };
};

JSON.stringify(circularReference, getCircularReplacer());
// {"otherData":123}
```

Смотрите также
--------------

* `JSON.stringify`
* cycle.js – вводит две функции, JSON.decycle и JSON.retrocycle, что даёт возможность кодирования и декодирования циклических структур и групп обеспечения доступности баз данных в расширенный и обратно совместимый формат JSON.


TypeError: "x" is not a function - JavaScript

TypeError: "x" is not a function
================================

Сообщение
---------
```

TypeError: "x" is not a function
```

Тип ошибки
----------

`TypeError`.

Что пошло не так?
-----------------

Была сделана попытка вызвать значение как функцию, но оно на самом деле не является функцией. Некоторый код ожидает, что вы предоставите функцию, но этого не происходит.

Возможно, есть ошибка в имени функции? Возможно, объект, метод которого вы вызываете, не содержит в себе этой функции? Для примера, JavaScript объекты не имеют `map` функции, а JavaScript Array - имеют.

Есть множество функций, нуждающихся в колбэк-функциях. Вы должны будете предоставить колбэк-функцию для того, чтобы эти методы работы правильно:

* Когда работаете с `Array` или `TypedArray` объектами:
    + `Array.prototype.every()`, `Array.prototype.some()`, `Array.prototype.forEach()`, `Array.prototype.map()`, `Array.prototype.filter()`, `Array.prototype.reduce()`, `Array.prototype.reduceRight()`, `Array.prototype.find()`
* Когда работаете с `Map` (en-US) и `Set` объектами:
    + `Map.prototype.forEach()` (en-US) и `Set.prototype.forEach()`
Примеры
-------

### Ошибки в имени функции

В данном случае, случающемся очень часто, есть опечатка в имени метода:

```js
var x = document.getElementByID("foo");
// TypeError: document.getElementByID is not a function
```

Корректное имя функции - `getElementById`:

```js
var x = document.getElementById("foo");
```

### Функция вызвана с неверным объектом

Для некоторых методов вы должны предоставить колбэк-функцию, и она будет работать только на корректных объектах. В этом примере используется `Array.prototype.map()`, в котором `Array` будет работать только с массивами.

```js
var obj = { a: 13, b: 37, c: 42 };

obj.map(function (num) {
  return num \* 2;
});

// TypeError: obj.map is not a function
```

Использование с массивом:

```js
var numbers = [1, 4, 9];

numbers.map(function (num) {
  return num \* 2;
});

// Array [ 2, 8, 18 ]
```

Смотрите также
--------------

* Functions


SyntaxError: missing name after . operator(отсутствует имя после. оператора) - JavaScript

SyntaxError: missing name after . operator(отсутствует имя после. оператора)
============================================================================

Сообщение
---------
```

SyntaxError: missing name after . operator
```

Тип ошибки
----------

`SyntaxError`Что пошло не так?
-----------------

Оператор точки (.) используется для доступа к свойству. Необходимо указать имя свойства, к которому требуется получить доступ. Для доступа к вычисляемому свойству может потребоваться изменить доступ к свойству с точки на квадратные скобки. Это позволит вычислить выражение. Может быть, вы собирались сделать конкатенацию вместо этого? В этом случае необходим оператор plus ( + ). См. примеры ниже.

Примеры
-------

### Доступ к свойствам

Методы доступа к свойствам в JavaScript используют точку (.) или квадратные скобки ([]), но не оба. Квадратные скобки обеспечивают доступ к вычисляемым свойствам.

```js
var obj = { foo: { bar: "baz", bar2: "baz2" } };
var i = 2;

obj.[foo].[bar]
// SyntaxError: отсутствует имя после оператора .

obj.foo."bar"+i;
// SyntaxError: отсутствует имя после оператора .
```

Чтобы исправить этот код, необходимо получить доступ к объекту следующим образом:

```js
obj.foo.bar; // "baz"
//или же
obj["foo"]["bar"]; // "baz"

//вычисляемые свойства требуют квадратных скобок
obj.foo["bar" + i]; // "baz2"
```

### Доступ к свойствам против конкатенации

Если вы пришли из другого языка программирования (например, PHP), также легко перепутать оператор точки (.) и оператор конкатенации (+).

```js
console.log("Hello" . "world");

// SyntaxError: missing name after . operator
```

Вместо этого необходимо использовать знак плюс для объединения:

```js
console.log("Hello" + "World");
```

Смотрите также
--------------

* Property accessors(доступ к свойствам)


ReferenceError: reference to undefined property "x" - JavaScript

ReferenceError: reference to undefined property "x"
===================================================

Сообщение
---------
```

ReferenceError: reference to undefined property "x" (Firefox)
```

Тип ошибки
----------

(только в Firefox) Предупреждение `ReferenceError`, возникает, только если значение настройки `javascript.options.strict` равно `true`.

Что пошло не так?
-----------------

Совершена попытка обращения к свойству объекта, которое не определено. Существует два способа обращения к свойствам: обратитесь к странице справочника property accessors для более подробной информации.

Примеры
-------

### Случаи возникновения ошибки

В данном примере свойство `bar` не определено, поэтому возникнет ошибка `ReferenceError`.

```js
var foo = {};
foo.bar; // ReferenceError: reference to undefined property "bar"
```

### Правильный код

Чтобы избежать ошибки, потребуется либо задать для объекта свойство `bar`, либо проверить существование данного свойства, прежде чем обращаться к нему. Одним из способов это сделать является использование метода `Object.prototype.hasOwnProperty()`:

```js
var foo = {};

// Задать свойство bar

foo.bar = "moon";
console.log(foo.bar); // "moon"

// Убедиться, что свойство bar существует, прежде чем обращаться к нему

if (foo.hasOwnProperty("bar")) {
  console.log(foo.bar);
}
```

Смотрите также
--------------

* property accessors