DevGang
Авторизоваться

Руководство по изучению Dayjs

Игра с датами в JavaScript — сложная задача, поэтому существуют вспомогательные библиотеки, одна из самых известных — moment.js, которая, как мы обсуждали ранее, стала устаревшим проектом.

Одной из предложенных альтернатив является day.js, которая сама по себе является отличной библиотекой для эффективной работы с данными. Пользуюсь им уже больше года и уже хорошо в нем разбираюсь.

Почему вам стоит использовать Day.js?

  • Миллионы загрузок
  • Активно поддерживается
  • Легче работать
  • Альтернатива размером 2 КБ Moment.js + API-интерфейсы, совместимые с Moment.js
  • Работает с браузером + Node.js.
  • Возвращает новый экземпляр (предотвращает ошибки)

Начало работы с Dayjs

Это очень просто. Вы можете найти руководство для Node.js здесь, а для браузера — здесь. Если вы, как и я, используете TypeScript, это должно помочь вам настроить DayJS.

Я работаю с Node.js в среде JavaScript. Версия DayJS — ^1.11.10. Упоминаю об этом здесь, поскольку в будущем могут быть внесены любые критические изменения.

Если вы следуете этому руководству, сделайте следующее:

Подготовьте среду:

npm init

Установите DayJS точной версии:

npm install dayjs@1.11.10

Создайте файл index.js и импортируйте DayJS:

const dayjs = require('dayjs')

Это моя минималистичная настройка для подготовки этого руководства:

Основы Dayjs

Обертка объекта Date создается Day.js. Сам объект Day.js неизменяем (т. е. не может быть изменен). Любая операция API, выполненная в нем для манипуляции или любой другой цели, вернет новый экземпляр.

Объект Dayjs() для текущего времени

Давайте немного изучим DayJS:

console.log(dayjs());

Это точно так же:

console.log(dayjs(new Date()));

Он возвращает текущую дату в следующем формате объекта:

{
  '$L': 'en',
  '$d': 2023-11-07T09:49:35.970Z,
  '$y': 2023,
  '$M': 10,
  '$D': 7,
  '$W': 2,
  '$H': 14,
  '$m': 49,
  '$s': 35,
  '$ms': 970,
  '$x': {},
  '$isDayjsObject': true
}

Объект Dayjs для определенного времени

Мы также можем вежливо попросить DayJS вернуть объект на выбранную нами дату... Вот так:

dayjs('12-12-2023');

или вот так:

dayjs(new Date(2023, 8, 8))

Он возвращает это:

{
  '$L': 'en',
  '$d': 2023-12-11T19:00:00.000Z,
  '$y': 2023,
  '$M': 11,
  '$D': 12,
  '$W': 2,
  '$H': 0,
  '$m': 0,
  '$s': 0,
  '$ms': 0,
  '$x': {},
  '$isDayjsObject': true
}

Форматирование данных

Dayjs предоставляет множество возможностей для форматирования даты, которую вы хотите отображать пользователям.

Например, это:

dayjs('2023-12-23').format('DD/MM/YYYY') // '23/12/2023'

Всю таблицу для форматирования вы можете найти здесь.

Работа с плагинами

Dayjs предоставляет набор плагинов, которые облегчают ваши задачи.

Чтобы работать с плагинами, вам необходимо сначала импортировать их, а затем расширить с помощью day.js следующим образом:

const dayjs = require("dayjs");
const isToday = require("dayjs/plugin/isToday");
dayjs.extend(isToday);
console.log(dayjs("11-07-2023").isToday()); // true

Плагин выше поможет вам определить, является ли введенная дата сегодняшней или нет.

Классные плагины

Вот некоторые из действительно интересных, которые помогут вам сэкономить часы (при работе с собственными датами):

Следующее поможет вам определить, относится ли указанная дата к вчерашнему, сегодняшнему или завтрашнему дню, вернув логический ответ:

  • isToday
  • isYesterday
  • isTomorrow

Вам следует изучить другие в соответствии с потребностями вашего проекта здесь.

Показать варианты

Вы можете отображать объекты DayJS следующим образом:

Данные JavaScript

console.log(dayjs("2023-12-23").toDate());

String

dayjs('2019-01-25').toString() // 'Fri, 25 Jan 2019 02:00:00 GMT'

JSON

dayjs('2023-01-12').toJSON() // '2023-01-12T02:00:00.000Z'

Array

dayjs.extend(toArray)

dayjs('2023-01-12').toArray() // [ 2023, 0, 12, 0, 0, 0, 0 ]

Object

dayjs.extend(toObject)

dayjs('2023-01-23').toObject()
/* { years: 2023,
     months: 0,
     date: 23,
     hours: 0,
     minutes: 0,
     seconds: 0,
     milliseconds: 0 } */

Манипуляция

Вы можете делать любые манипуляции. Подобно добавлению или вычитанию времени любого формата с помощью объекта Date.

Добавление времени

Вы можете добавить время следующим образом:

const date1 = dayjs();
const date2 = date1.add(2, "day");
console.log(date2);

date1 не изменяется при применении date1.add. Это то, что я имел в виду под неизменностью ранее.

Вычитание времени

Вычитание происходит так:

const date1 = dayjs();
const date2 = date1.subtract(2, "day");
console.log(date2);

Поиск начала или конца времени

Dayjs позволяет вам найти начало или конец месяца или года. В основном его используют месяцами.

dayjs().startOf('year')
dayjs().endOf('year')

Поиск разницы между двумя датами:

Это то, что каким-то образом используется во многих проектах, поэтому я решил упомянуть и этот сценарий в руководстве.

Вы можете найти разницу между двумя датами следующим образом:

const firstDate = dayjs("2023-06-20");
const secondDate = dayjs("2022-11-11");
console.log(firstDate.diff(secondDate));

По умолчанию он дает ответ в миллисекундах:

19094400000

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

firstDate.diff(secondDate, "month") // 7

Если вам нужен очень конкретный ответ со значением десятичных точек, сделайте следующее:

firstDate.diff(secondDate, "month", true) // 7.290322580645161

Работаем с UTC

В моем проекте мне пришлось работать с UTC из-за проблем с таймзонами. Dayjs предоставляет комплексное решение этой проблемы с помощью плагина.

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

dayjs.extend(utc)

var a = dayjs()
a.format() //2019-03-06T08:00:00+08:00
a.utc().format() // 2019-03-06T00:00:00Z

Timezone

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

Упоминание примера из официальных документов здесь:

dayjs.extend(utc)
dayjs.extend(timezone)

// current time zone is 'Europe/Berlin' (offset +01:00)
// Parsing
dayjs.tz("2013-11-18 11:55:20", "America/Toronto") // '2013-11-18T11:55:20-05:00'

// Converting (from time zone 'Europe/Berlin'!)
dayjs("2013-11-18 11:55:20").tz("America/Toronto") // '2013-11-18T05:55:20-05:00'

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

Его также можно использовать для угадывания часового пояса пользователя. Так:

dayjs.tz.guess() // America/Chicago

i18n

Если ваш проект предполагает интернационализацию, не волнуйтесь. Dayjs также поможет вам.

Вы можете узнать, как загрузить его в проект Node.js здесь, а для браузера — подробности здесь.

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

Заключение

Этот блог поможет вам решить, стоит ли вам выбирать DayJS для своего следующего проекта или нет. Я постарался включить в свой проект то, что использовал в течение года.

Приятного кодирования! 🎉💻✨

Источник:

#JavaScript #NodeJS #React
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу