Работа с датами и временем всегда была немного обременительной. Я всегда думал, что библиотека JavaScript для манипулирования датами будет весьма полезна. Лишь недавно я познакомился с Moment.js , потрясающей библиотекой JavaScript для проверки, анализа и манипулирования датами и временем.
Начало работы с Moment.js
Moment.js свободно доступен для скачивания с домашней страницы проекта . Moment.js можно запустить как из браузера, так и из приложения Node.js. Чтобы использовать его с Node, установите модуль с помощью следующей команды.
npm install moment
Затем просто require()
и используйте его в своем приложении, как показано ниже.
var moment = require('moment'); moment().format();
Чтобы запустить Moment из браузера, загрузите скрипт и включите его, используя тег script
, как показано в следующем примере. Moment.js создает объект глобального moment
который можно использовать для доступа ко всем функциям анализа и манипуляции с датой и временем.
<html> <head> <script src="moment.js"></script> <script> moment().format(); </script> </head> <body> </body> </html>
Форматирование даты
В прошлом я вспоминал преобразование строк Date
объекты Date
, сбор отдельных фрагментов данных и последующую конкатенацию строк. Moment.js упростил процесс преобразования даты в любой конкретный формат. Преобразование формата даты с помощью Moment является простым, как показано в следующем примере.
moment().format('YYYY MM DD');
moment()
показывает текущую дату и время, а format()
преобразует текущую дату и время в указанный формат. В этом примере форматируется дата в виде четырехзначного года, за которым следует пробел, за которым следует двухзначный месяц, еще один пробел и двухзначная дата. Вы можете увидеть этот код в действии, ознакомившись с этой демонстрацией .
Проверка даты
Еще одна досадная задача, которую упростил Moment.js, — проверка даты. Чтобы выполнить проверку, просто передайте строку даты объекту moment
вместе с форматом даты и вызовите метод isValid()
. Этот метод возвращает true
если дата действительна, и false
противном случае. Пример этого показан ниже вместе с сопровождающим демо .
var dateEntered = $('#txtEnteredDate').val(); if (!moment(dateEntered,'MM-DD-YYYY').isValid()) { console.log('Invalid Date'); } else { console.log('Valid Date'); }
Есть несколько других полезных флагов в объекте, возвращаемом moment()
:
- переполнение — устанавливается, когда происходит переполнение. Примером может быть 13-й месяц или 32-й день.
- invalidMonth — Устанавливает, когда месяц недействителен, как Jannnuaarry.
- пусто — Установите, если введенная дата не содержит ничего для анализа.
- nullInput — Устанавливается, когда введенная дата равна
null
.
Манипулирование датами
Есть несколько опций для манипулирования moment
объектом. Например, вы можете добавлять или вычитать дни, месяцы, годы и т. Д. Это достигается с помощью методов add()
и subtract()
. В следующем примере показано, как семь дней, месяцев или недель добавляются к текущей дате.
moment().add('days', 7); // adds 7 days to current date moment().add('months', 7); // adds 7 months to current date moment().add('years', 7); // adds 7 years to current date
Точно так же метод subtract()
показан ниже.
moment().subtract('days', 7); // subtracts 7 days to current date moment().subtract('months', 7); // subtracts 7 months to current date moment().subtract('years', 7); // subtracts 7 years to current date
Время Отныне
Другая общая задача — определить, сколько времени существует между двумя датами. Для расчета времени с текущей даты Moment.js использует метод с именем fromNow()
. Вот пример, который проверяет, сколько времени существует с текущего времени:
moment().fromNow();
В этом примере кода отображается «несколько секунд назад». Если мы передадим дату объекту moment
он будет отображать временной диапазон в соответствии с разницей. Например, следующий код отображает «7 дней назад».
var dateA = moment().subtract('days', 7); dateA.fromNow();
Время от другой даты
fromNow()
используется для сравнения времени с текущей датой. Это просто особый случай from()
, который сравнивает две произвольные даты. Пример, который использует from()
показан ниже. Этот код отображается «через день». Вы можете увидеть этот код в действии, ознакомившись с этой демонстрацией .
var dateB = moment('2014-12-12'); var dateC = moment('2014-12-11'); console.log(dateB.from(dateC));
Расчет разницы между датами
Moment.js предлагает способ рассчитать разницу между двумя датами. По умолчанию разница вычисляется в миллисекундах, но ее также можно вернуть в днях, месяцах, годах и т. Д. Чтобы вычислить разницу, вызовите метод diff()
. Этот метод принимает дату в качестве первого аргумента. Единицу времени можно указать с помощью необязательного второго аргумента. Если это не включено, то используются миллисекунды. Следующий пример и демонстрация иллюстрируют, как используется diff()
.
var dateB = moment('2014-11-11'); var dateC = moment('2014-10-11'); console.log('Difference is ', dateB.diff(dateC), 'milliseconds'); console.log('Difference is ', dateB.diff(dateC, 'days'), 'days'); console.log('Difference is ', dateB.diff(dateC, 'months'), 'months');
Запросы даты
Moment.js также предоставляет методы сравнения дат. Это методы isBefore()
, isAfter()
и isSame()
. Как следует из имен, эти методы возвращают логическое значение, указывающее, является ли одна дата до, после или равна другой дате. Пример использования isAfter()
показан ниже.
console.log(moment('2010-09-20').isAfter('2010-10-19')); // returns false console.log(moment('2010-11-20').isAfter('2010-10-19')); // returns true
Существует также метод isLeapYear()
который проверяет високосные годы.
Международная языковая поддержка
Moment.js предлагает поддержку международного языка. Вы можете назначить глобальный язык или установить язык для конкретного объекта moment
. По умолчанию Moment.js поддерживает английский язык. Если вы хотите поддерживать любой другой язык, присвойте значения ключа этого конкретного языка moment.lang
. В следующем примере, взятом из документации Moment.js, показано, как можно добавить поддержку для французского языка.
moment.lang('fr', { months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'), monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'), weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'), weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'), weekdaysMin: 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'), longDateFormat: { LT: 'HH:mm', L: 'DD/MM/YYYY', LL: 'D MMMM YYYY', LLL: 'D MMMM YYYY LT', LLLL: 'dddd D MMMM YYYY LT' }, calendar: { sameDay: '[Aujourdhui à] LT', nextDay: '[Demain à] LT', nextWeek: 'dddd [à] LT', lastDay: '[Hier à] LT', lastWeek: 'dddd [dernier à] LT', sameElse: 'L' }, relativeTime: { future: 'dans %s', past: 'il ya %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: 'une année', yy: '%d années' }, ordinal: function (number) { return number + (number === 1 ? 'er' : 'ème'); }, week: { dow: 1, // Monday is the first day of the week. doy: 4 // The week that contains Jan 4th is the first week of the year. } }); moment.lang('fr'); console.log(moment(1316116057189).fromNow()); // il ya une heure moment.lang('en'); console.log(moment(1316116057189).fromNow()); // an hour ago
Вот демо для приведенного выше кода.
Вывод
Moment.js действительно потрясающая библиотека, которая упрощает манипуляции с датой и временем и проверки. Эта библиотека упрощает работу разработчиков приложений, что почти всегда хорошо. В этой статье мы сосредоточились на некоторых функциях Moment.js, которые помогают в анализе, проверке и манипулировании datetime в браузере и приложениях Node.js. Ряд полезных плагинов также доступен для Moment.js. Плагины, такие как ISO Calendar, Jalaali Calendar и многие другие, можно найти на официальной странице плагинов . Подробнее о Moment.js читатель направляет в документацию библиотеки.