Управление датами, временем и часовым поясом с помощью 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, читатель направляется к документации библиотеки.