Главная » Работа с датами в JavaScript

Работа с датами в JavaScript


29.04.2021, 16:17
Чтобы создать новый объект даты, используем конструктор:

Код

const now = new Date();

console.log(now); // => покажет текущую дату и время

В консоли мы увидим текущую дату и время в таком формате:

2021-04-29T19:08:35.758Z

В левой части от разделителя Т указана дата, в правой части текущее время

В качестве аргумента мы можем передавать какую-либо дату в формате строки:

Код

const now = new Date('2021-04-29');

И в консоли мы увидим уже дату, а значение времени будет по дефолту нулями, так как мы его не указывали:

2021-04-29T00:00:00.000Z

Можно в качестве параметров указывать непосредственно дату в таком виде:

Код

const now = new Date(2021, 4, 29, 20);

Здесь 20 - это количество часов

В консоли мы увидим, однако, что месяц пятый, несмотря на то, что в аргумент передана цифра 4. Это потому, что месяцы в дате считаются с нуля.

2021-05-29T17:00:00.000Z

Кроме того, передаваемое количество часов в консоли отразилось не 20, а 17, это потому, что учитывается часовой пояс (например, для Москвы это GMT+3)

В качестве аргумента мы можем передать количество миллисекунд, которое будет преращено в дату.

Любая дата в JS хранится в миллисекундах (timestamp). Количество миллисекунд отсчитывается с 1 января 1970 года

В этом легко убедиться:

Код

const now = new Date(0);

console.log(now);

1970-01-01T00:00:00.000Z

Для получения даты до 1970-го года используется отрицательное значение миллисекунд.

Код

const now = new Date(-48858355667);

console.log(now);


1968-06-14T12:14:04.333Z

Методы объекта Date()

Метод getFullYear() - возвращает текущий год в формате 4-х цифр

Код

const now = new Date();

console.log(now.getFullYear()); // => 2021

Метод getMonth() - возвращает текущий месяц (отсчёт месяцев начинается с 0)

Код

const now = new Date();

console.log(now.getMonth()); // => вернёт 3, несмотря на то, что в момент написания этого материала месяц апрель(4)

Метод getDate() - возвращает текущее число

Код

const now = new Date();

console.log(now.getDate()); // => 29  

Метод getDay() - возвращает текущий день недели (нумерация с воскресенья, у него 0 индекс, у субботы это 6)

Код

const now = new Date();

console.log(now.getDay()); // => 4 (сегодня четверг)

Все вышеперечисленные методы возвращают значения в соответствии с часовым поясом. Для разных часовых поясов есть два метода получения часов:

Код

const now = new Date();

console.log(now.getHours()); /* => 22 */
console.log(now.getUTCHours()); /* => 19 */

Метод getTimezoneOffset() - возвращает разницу в минутах между часовым поясом и UTC

Код

const now = new Date();

console.log(now.getTimezoneOffset()); // => -180 (то есть -3 часа)

Метод getTime() - возвращает timestamp

Код

const now = new Date();

console.log(now.getTime()); // => 1619726460032

Методы-сеттеры для установки даты

Допустим, текущее время в данный момент 22:11, установим произвольное значение часов и выведем в консоль (в данном случае в консоль браузера):

Код

const now = new Date();

console.log(now.setHours(4)); /* Устанавливаем произвольно количество часов 4 */
console.log(now);

В консоли браузера видим, что часы изменились на то значение, что было нами установлено:

Wed May 05 2021 04:11:38 GMT+0300 (Москва, стандартное время)

Также мы можем задать вторым аргументом значение минут:

Код

const now = new Date();

console.log(now.setHours(4, 34));
console.log(now);

Wed May 05 2021 04:34:38 GMT+0300 (Москва, стандартное время)


Методы-сеттеры работают аналогично геттерам,с той лишь разницей, что вместо get используется set.

Мы можем использовать даты для измерения промежутков времени. Например, код ниже демонстрирует как можно узнать за какое количество миллисекунд отработает цикл:

Код

let start = new Date(); /* начальный timestamp, засекаем время в начале работы цикла */

for (let i = 0; i < 100000; i++) {
  let some = i ** 2; /* здесь i каждый раз возводится в квадрат */
}

let end = new Date(); /* конечный timestamp, засекаем время в конце работы цикла */

console.log(`Цикл отработал за ${end - start} миллисекунд`);

КОММЕНТАРИИ (0)

ТЕГИ МАТЕРИАЛА
timestamp
РЕЙТИНГ МАТЕРИАЛА (0.0 / 0)