Лови moment.js или удобная библиотека для работы со временем на JavaScript

Опубликовано

momentjsРабота с датой в javascript для разработчиков в том виде, в котором она реализована, порой предоставляется не совсем удобной. Для того, что бы отформатировать дату в нужном формате приходится использовать множество функций объекта Date. Например, куда проще с этим делом обстоит в языке PHP в котором с помощью функции date можно форматировать дату в нужный формат. В JavaScript же нам понадобиться использовать методы объекта, например, getFullYeargetHours или им подобные, да и еще проверять что бы у числа были впереди идущие нули.

Все это порождает огромное количество кода с разными проверками. Чтобы этого избежать хочу порекомендовать вам одну из удобных (на мой взгляд) библиотек для работы со временем на JavaScript. Это – moment.js.

Данная библиотека предоставляет не только удобные функции для форматирования даты, но и различные возможности для операций над временем и главное – ее можно использовать вместе с node.js, что позволит вам сократить время разработки ваших приложений. Кроме того, библиотека имеет множественную локализацию включая русскую. Скачать последнюю версию библиотеки вы всегда сможете на GitHub. Дальше рассмотрим несколько основных возможностей библиотеки.

Подключение библиотеки производится стандартным способом. Также подключим русскую локализацию.

<script type="text/javascript" src="moment.min.js"></script>
<script type="text/javascript" src="moment.ru.min.js"></script>

Библиотека имеет достаточно хорошую документацию, поэтому возьмем несколько примеров:

moment().format('MMMM Do YYYY, HH:mm:ss');
moment().format('dddd');
moment().format("MMM Do YY");
moment().format('YYYY [escaped] YYYY');
moment().format();

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

февраль 21. 2013, 18:48:48
четверг
фев 21. 13
2013 escaped 2013
2013-02-21T18:48:48+04:00

Кроме того moment.js предоставляет очень удобные возможности для манипуляции с датами, например, добавим к текущей дате несколько дней

moment().add('days', 7).add('months', 1);
moment().add({days:7,months:1}); // добавление с помощью объекта

Или можно отнять несколько дней

moment().subtract('days', 7);

Очень легко получать даты начала месяца, года или недели, например,

moment().startOf('year');   // Первое Января текущего года
moment().startOf('month');  // Первый день месяца
moment().startOf('week');   // Первый день недели
moment().startOf('day');    // 0:00 Текущего дня
moment().startOf('hour');   // Начало текущего часа
moment().startOf('minute'); // Начало минуты
moment().startOf('second'); // Идентично вызову as moment().milliseconds(0);
moment().endOf("year"); // Конец года 31 декабря 11:59:59.999

Удобно использовать эту библиотеку для получения количества времени с какой-либо даты, например,

moment([2012, 0, 29]).fromNow(); // год назад
moment([2013, 0, 29]).fromNow(true); // 24 дня
moment([2013, 0, 29]).fromNow(); // 24 дня назад

Аналогичным способом удобно отсчитывать время от какого-то промежутка времени. Например,

var start = moment([2014, 0, 5]);
var end = moment([2013, 0, 10]);
start.from(end);
// "через год"

Очень легко и удобно можно получить количество дней в месяце

moment("2013-02", "YYYY-MM").daysInMonth() // 28
moment("2013-01", "YYYY-MM").daysInMonth() // 31

Еще больше документации и примеров можно найти на официальном сайте в разделе “документация” http://momentjs.com/docs/.

Данную библиотеку мы используем в одном из наших проектов и она нам очень сильно помогает и облегчает многие задачи.

Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedInShare on VK
  • efremovxp

    А как сделать вывод рандомной даты? Например тыкнул на ссылку и в поле ввода появляется случайная дата

    • Дмитрий Гордин

      прибавить к текущей дате случайное число дней?

  • Андрей Суворов

    У меня задача найти ближайшую среду и еще 5 сред после ближайшей. Ни как не получается реализовать. Не подскажете?

    • Ну, как решение в лоб-3 среды это 3 недели. это 21 день. От текущего дня пройти циклом до 21 и прибавлять по 1 дню к дате. Потом проверять является ли этот день средой. У momentjs есть “Day of Week” параметр. Например moment().format(‘d’)==3 . 0 – это вск.

      Добавлять дни можно через moment().add(i, ‘d’); Где i – значение из цикла

  • Vasiliy Pereverzev

    а как получить вместо “несколько секунд назад”, при moment(“2017-05-23T13:05:23+00:00”).startOf(‘second’).fromNow()
    n секунд назад