JavaScript предоставляет встроенный объект Date
, который позволяет разработчикам работать с датами и временем. С объектом Date
вы можете выполнять различные операции, такие как получение текущей даты и времени, сравнение дат и форматирование дат.
Доступ к объекту Date
осуществляется через глобальную функцию Date
. Чтобы создать объект Date
, вы можете передать строку даты в функцию Date
, например:
let date = new Date("December 14, 2022");
Вы также можете создать объект Date
, используя отдельные значения даты и времени, например:
let date = new Date(2022, 11, 14, 12, 0, 0);
Объект Date
имеет несколько методов, позволяющих получить информацию о дате и времени, таких как год, месяц, день, час, минута и секунда. Например, вы можете использовать метод getFullYear()
для получения года и метод getMonth()
для получения месяца.
let date = new Date("December 14, 2022"); let year = date.getFullYear(); // 2022 let month = date.getMonth(); // 11 // ...
Помимо встроенного объекта Date
, есть также несколько библиотек, облегчающих работу с датами в JavaScript.
Дайс
Day.js — это небольшая, быстрая и неизменяемая библиотека дат, которая предоставляет API, аналогичный Moment.js. Чтобы установить day.js, вы можете использовать менеджер пакетов npm
, например:
npm install dayjs
1. Базовое получение текущей даты и времени с помощью dayjs в JavaScript
После того, как вы установили day.js, вы можете создать объект day.js
, используя функцию dayjs()
,
// Get the current date and time using dayjs const now = dayjs(); // Format the date and time console.log(now.format('MM/DD/YYYY, h:mm:ss a')); // 12/14/2022, 10:15:30 am // Parse a date string using dayjs const dateString = '2022-12-14'; const date = dayjs(dateString); // Format the date using dayjs console.log(date.format('MM/DD/YYYY')); // 12/14/2022
2. Управление датами с помощью dayjs в JavaScript
// Parse a date string using dayjs const dateString = '2022-12-14'; const date = dayjs(dateString); // Add one month to the date const nextMonth = date.add(1, 'month'); // Subtract two days from the date const previousTwoDays = date.subtract(2, 'day'); // Check if the date is before a given date const isBefore = date.isBefore('2022-12-20');
3. Сравнение дат с dayjs в JavaScript»
// let's create some dates to work with const date1 = dayjs('2022-12-14'); const date2 = dayjs('2022-12-15'); // Check if date1 is before date2 console.log(date1.isBefore(date2)); // Output: true // Check if date1 is after date2 console.log(date1.isAfter(date2)); // Output: false // Check if date1 is the same as date2 console.log(date1.isSame(date2)); // Output: false
Вы также можете сравнить две даты, используя метод .isSame()
, который возвращает логическое значение, указывающее, совпадают ли две даты.
const firstDate = dayjs('2022-12-01'); const secondDate = dayjs('2022-12-31'); const thirdDate = dayjs('2022-12-01'); // Check if the first and second dates are the same console.log(firstDate.isSame(secondDate)); // Output: false // Check if the first and second dates are the same year console.log(firstDate.isSame(secondDate,'year')); // Output: true // Check if the first and third dates are the same console.log(firstDate.isSame(thirdDate)); // Output: true
Вы также можете указать уровень точности для сравнения дат, используя второй аргумент метода .isSame()
. Например, вы можете сравнить только год, месяц или день, передав строку 'year'
, 'month'
или 'day'
соответственно.
4. Сортировка дат с помощью dayjs в JavaScript
Метод sort можно использовать для сортировки массива дат в порядке возрастания или убывания. Например:
let dates = [ dayjs('2022-12-14T12:00:00'), dayjs('2022-12-13T12:00:00'), dayjs('2022-12-15T12:00:00')]; dates.sort((a, b) => a.diff(b)); // sort dates in ascending order dates.sort((a, b) => b.diff(a)); // sort dates in descending order
Методы min
и max
можно использовать для поиска самой ранней и самой поздней дат в массиве дат соответственно. Например:
let dates = [ dayjs('2022-12-14T12:00:00'), dayjs('2022-12-13T12:00:00'), dayjs('2022-12-15T12:00:00')]; let earliestDate = dates.reduce((a, b) => a.isBefore(b) ? a : b); let latestDate = dates.reduce((a, b) => a.isAfter(b) ? a : b); console.log(earliestDate) // '17:10 12/14/2022' console.log(latestDate) // '17:10:14 2022-12-14'
5. Отныне
Работа этого зависит от плагина
[RelativeTime
](https://day.js.org/docs/en/plugin/relative-time)
RelativeTime добавляет .from
.to
.fromNow
.toNow
API для форматирования даты в строки относительного времени (например, 3 часа назад). документы
Если вы передадите true, вы можете получить значение без суффикса.
import dayjs from "dayjs"; import relativeTime from "dayjs/plugin/relativeTime"; dayjs.extend(relativeTime); dayjs("1997-18-03").fromNow(); // '25 years ago' dayjs("1997-18-03").fromNow(true); // '25 years' +--------------------------+-----+----------------------------------+ | Range | Key | Sample Output | +--------------------------+-----+----------------------------------+ | 0 to 44 seconds | s | a few seconds ago | | 45 to 89 seconds | m | a minute ago | | 90 seconds to 44 minutes | mm | 2 minutes ago ... 44 minutes ago | | 45 to 89 minutes | h | an hour ago | | 90 minutes to 21 hours | hh | 2 hours ago ... 21 hours ago | | 22 to 35 hours | d | a day ago | | 36 hours to 25 days | dd | 2 days ago ... 25 days ago | | 26 to 45 days | M | a month ago | | 46 days to 10 months | MM | 2 months ago ... 10 months ago | | 11 months to 17months | y | a year ago | | 18 months+ | yy | 2 years ago ... 20 years ago | +--------------------------+-----+----------------------------------+
Две популярные хорошие библиотеки: Day.js и date-fns. Обе библиотеки предлагают ряд методов для работы с датами и временем и известны своим небольшим размером и производительностью.
Мы обнаружили, что date-fns имеет наименьший размер в наших тестах, всего 1,6 КиБ при использовании только одного метода. Однако при использовании большего количества методов преимущество date-fns в размере уменьшалось, в результате чего конечный размер составлял 3,63 КБ при использовании веб-пакета и 3,6 КБ при использовании esbuild.
С другой стороны, Day.js предлагает API, аналогичный API Moment.js, что делает его привлекательным вариантом для проектов, которые уже используют Moment.js. В наших тестах Day.js был немного больше, чем date-fns, с размером 6,64 КиБ при использовании webpack и 7,0 КиБ при использовании esbuild. Однако Day.js требует использования плагинов для некоторых методов, что может увеличить общий размер библиотеки.
Конец
В целом, date-fns — лучший выбор для проектов, которые обеспокоены размером сборки, а Day.js — хороший вариант для проектов, которые хотят перейти с Moment.js.