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

Управление датами, временем и часовым поясом с помощью Moment.js

Работа с датами и временем в JavaScript всегда была немного сложной. Вот почему, если вы зададите вопрос, связанный с датой, в StackOverflow, вы часто услышите ответ “Использовать Moment.js”.

Что такое Moment.js?

Moment.js это большое сообщество с открытым исходным кодом, работающее с датами и временем в JavaScript. Это позволяет вам анализировать, проверять, манипулировать и отображать даты и время, используя чистый и лаконичный API.

В этом блоге я покажу вам, как начать работать с Moment.js, а также продемонстрировать несколько его распространенных вариантов использования. Дополнительная информация об обработки даты и времени с помощью объета Date, можно узнать в руководстве по датам.

Начало работы с Moment.js

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

npm install moment

yarn add moment

Затем просто require() или импортируйте и используйте его в своем приложении, как показано ниже.

const moment = require('moment') or import moment from 'moment';
const today = moment();
console.log(today.format());

// 2023-05-05T10:55:16+05:30

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

Moment.js упростил процесс преобразования данных в какой-либо определенный формат. Преобразование формата даты с помощью Moment выполняется просто, как показано в следующем примере.

moment().format('MMMM Do YYYY, h:mm:ss a'); // May 5th 2023, 11:04:44 am
moment().format('dddd');                    // Friday
moment().format("MMM Do YY");               // May 5th 23
moment().format('YYYY [escaped] YYYY');     // 2023 escaped 2023
moment().format();   // 2023-05-05T10:55:16+05:30                     

Манипулирование датами

Существует несколько вариантов манипулирования объектом moment. Например, вы можете добавлять или вычитать дни, месяцы, годы и т.д. Это достигается с помощью методов add() и subtract(). В следующем примере показано, как к текущей дате добавляются семь дней, месяцев или недель.

moment().add(7, 'days');    // adds 7 days to current date
moment().add(7, 'months');  // adds 7 months to current date
moment().add(7, 'years');   // adds 7 years to current date

Аналогично, метод subtract() показан ниже.

moment().subtract(7, 'days');   // subtracts 7 days to current date
moment().subtract(7, 'months'); // subtracts 7 months to current date
moment().subtract(7, 'years');  // subtracts 7 years to current date

Обратите внимание, что каждый из приведенных выше примеров вернет объект moment. Если вам нужна удобочитаемая дата, вам нужно будет соответствующим образом ее отформатировать.

Время с этого момента

Другой распространенной задачей является определение того, сколько времени существует между двумя датами. Для расчета времени с текущей даты, Moment.js использует метод с именем fromNow().

moment('2023.05.03', 'YYYY.MM.DD').fromNow() // 2 days ago

Если мы передадим значение true в качестве аргумента, мы можем получить значение без суффикса.

moment('2023.05.03', 'YYYY.MM.DD').fromNow(true) // 2 days 

Международная языковая поддержка

Moment.js предлагает отличную поддержку i18n. Это позволяет вам назначить глобальный язык или установить язык для конкретного объекта moment. По умолчанию он поддерживает английский язык. Если вы хотите поддерживать любой другой язык, то назначьте ключевые значения этого конкретного языка moment.locale. Следующий сокращенный пример, взятый из Moment.js документы, показывающие, как можно добавить поддержку французского языка.

import moment from 'moment';

moment.locale('fr', {
  months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),
  weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
  relativeTime : {
      future : 'dans %s',
      past : 'il y a %s',
      s : 'quelques secondes',
      m : 'une minute',
      mm : '%d minutes',
      h : 'une heure',
      hh : '%d heures',
      d : 'un jour',
      dd : '%d jours',
      M : 'un mois',
      MM : '%d mois',
      y : 'un an',
      yy : '%d ans'
  }
});

moment.locale('fr');

moment(1316116057189).fromNow(); // il y a une heure
moment.locale('en');
moment(1316116057189).fromNow(); // an hour ago

Текущий часовой пояс

Moment-Timezone - это дополнение для Moment.js. Он может анализировать и отображать даты в любом часовом поясе. Чтобы использовать его, установите модуль, используя следующую команду.

npm install moment-timezone --save   # npm
yarn add moment-timezone             # Yarn

Формат даты в любом часовом поясе

var jun = moment("2014-06-01T12:00:00Z");
var dec = moment("2014-12-01T12:00:00Z");

jun.tz('America/Los_Angeles').format('ha z');  // 5am PDT
dec.tz('America/Los_Angeles').format('ha z');  // 4am PST

jun.tz('America/New_York').format('ha z');     // 8am EDT
dec.tz('America/New_York').format('ha z');     // 7am EST

jun.tz('Asia/Tokyo').format('ha z');           // 9pm JST
dec.tz('Asia/Tokyo').format('ha z');           // 9pm JST

jun.tz('Australia/Sydney').format('ha z');     // 10pm EST
dec.tz('Australia/Sydney').format('ha z');     // 11pm EST

Можно также преобразовать время с одного формата в другой, что облегчит вам и вашим коллегам работу.

Преобразование дат между часовыми поясами

var newYork    = moment.tz("2014-06-01 12:00", "America/New_York");
var losAngeles = newYork.clone().tz("America/Los_Angeles");
var london     = newYork.clone().tz("Europe/London");

newYork.format();    // 2014-06-01T12:00:00-04:00
losAngeles.format(); // 2014-06-01T09:00:00-07:00
london.format();     // 2014-06-01T17:00:00+01:00

Вывод

Moment.js это действительно потрясающая библиотека, которая упрощает манипуляции и проверки, связанные с датой и временем. В этой статье мы сосредоточились на некоторых особенностях Moment.js которые помогают в анализе, проверке и манипулировании датами и временем в браузере и Node.js приложения. Также доступен ряд полезных плагинов для Moment.js. Подробнее о Moment.js, читатель направляется к документации библиотеки.

Источник:

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

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

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

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