Статьи

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

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