логотип сайта MyLittleServices.ru

fate.js

Библиотека JavaScript

Вообще-то я просто делал очередной сервис, и уже в процессе решил, что функции, мною написанные, не только полезны, но и посвящены одной определенной теме: работе с датой. Решил соорудить библиотеку. Далекую от идеала, конечно, но на мой вкус вполне рабочую. Есть тут многое, см. ниже.

Массив с русскими названиями месяцев в именительном падеже:
fate.months_nominative_ru[0] // январь

Массив с русскими названиями месяцев в родительном падеже:
fate.months_genitive_ru[7] // августа

Массив с русскими названиями дней недели в именительном падеже:
fate.dotw_ru[0] // воскресенье
JavaScript начинает счет от 0, как и многие другие языки. Месяцы следуют по-человечески, с января по декабрь (их номера с 0 по 11). Дни недели начинаются с воскресенья, ибо грех было не воспользоваться возможностью получить нормальный порядок, где понедельник - это 1.

Функция, преобразующая дату в формате ДД.ММ.??ГГ в машиночитаемый вид (YYYY-MM-DD):
fate.get_mr_date("01.12.84") // 1984-12-01
Если в годе две цифры - функция дополнит текущим веком (если цифры соответствуют текущему году или более раннему) либо прошлым (если число больше, чем текущий год).

Функция для вывода полной записи времени на русском языке с правильными окончаниями:
fate.get_ru_time(11, "hours") + " " + fate.get_ru_time(54, "minutes") + " " + fate.get_ru_time(23, "seconds") + " " + fate.get_ru_time(777, "milliseconds"); // 11 часов 54 минуты 23 секунды 777 миллисекунд

Функция эта возвращет текущую полную дату в машиночитаемом (YYYY-MM-DDTHH:mm:ss.sss) виде:
fate.get_mr_now() // 2019-06-29T18:03:19.913

Функция, возвращающая полную запись для компонентов даты с нулями, если нужно:
fate.get_full_date_component(11, true) // 011
Второй аргумент нужен для работы с миллисекундами (только в этом случае нужно возможно трехзначное число), иначе указывать не нужно.

Функция, возвращающая разницу в днях между двумя датами:
fate.get_date_diff(new Date(2018, 0, 1), new Date(2018, 11, 31)) // 364
Нужно иметь в виду, что тут дата ожидается обычная для JavaScript (то есть количество миллисекунд, прошедших с 1 января 1970 год).

Простая функция, возвращающая true, если год високосный, и false, если год обычный:
fate.is_leap(1988) // true

Клевая функция, превращающая некоторый отрезок времени в часы, минуты, секунды и миллисекунды:
fate.date2time(new Date(2019, 0, 1, 11, 22, 2, 55) - new Date(2018, 0, 1, 1, 44, 77)) // 8769 часов 36 минут 45 секунд 55 миллисекунд
Ожидаются миллисекунды, так что можно просто передать дату JavaScript. Интереснее, конечно, посчитать время в отрезке длиннее суток.

Очень простая функция, возвращающая дату JavaScript, соответствующую началу года:
fate.get_year_beginning(2019) // Tue Jan 01 2019 00:00:00 GMT+0300 (Москва, стандартное время)

Аналогичная предыдущей функция, возвращающая дату JavaScript, соответствующую концу года:
fate.get_year_ending(2018) // Tue Jan 01 2019 00:00:00 GMT+0300 (Москва, стандартное время)

Непростая функция, возвращающая количество полных недель в году:
fate.get_full_weeks(2020) // 51
Если год начинается со вторника - неделя не учитывается. Если год кончается субботой - неделя не учитывается. Считаюстя только недели, полностью входящие в год.

Простенькая функция, возвращающая время года на русском языке:
fate.get_ru_season(3, true) // весны
Ожидает месяц в обычном для JavaScript виде - то есть число с 0 по 11. Если нужен родительный падеж - можно передать true вторым параметром.

Функция, возвращающая квартал:
fate.get_quarter(8) // 3
Ожидает месяц в обычном для JavaScript виде - то есть число с 0 по 11.

Простая функция, возвращающая дату JavaScript, соответствующую началу квартала:
fate.get_quarter_beginning(2019, 5) // Mon Apr 01 2019 00:00:00 GMT+0300 (Москва, стандартное время)
Ожидается год и месяц.

Простая функция, возвращающая дату JavaScript, соответствующую концу квартала:
fate.get_quarter_ending(2019, 5) // Mon Jul 01 2019 00:00:00 GMT+0300 (Москва, стандартное время)
Ожидается год и месяц.

Простая функция, возвращающая дату JavaScript, соответствующую началу времени года:
fate.get_season_beginning(1988, 2) // Tue Mar 01 1988 00:00:00 GMT+0300 (Москва, стандартное время)
fate.get_season_beginning(1988, 1) // {winter_beginning_1: Fri Jan 01 1988 00:00:00 GMT+0300 (Москва, стандартное время), winter_beginning_2: Thu Dec 01 1988 00:00:00 GMT+0300 (Москва, стандартное время)}
Ожидается год и месяц. В связи с несовершенством нашего календаря, с зимой все не так просто: она в рамках года начинается дважды, поэтому для зимы возвращается объект с двумя начальными датами.

Простая функция, возвращающая дату JavaScript, соответствующую концу времени года:
fate.get_season_ending(1988, 2) // Wed Jun 01 1988 00:00:00 GMT+0400 (Москва, летнее время)
fate.get_season_ending(1988, 1) // {winter_ending_1: Tue Mar 01 1988 00:00:00 GMT+0300 (Москва, стандартное время), winter_ending_2: Sun Jan 01 1989 00:00:00 GMT+0300 (Москва, стандартное время)}
Ожидается год и месяц. Зима в рамках года заканчивается дважды, поэтому для зимы возвращается объект с двумя конечными датами.

Функция, возращающая объект с количеством рабочих и выходных дней:
fate.get_days_by_types(new Date(2018, 2, 1), new Date(2019, 8, 11)) // {labor_days: 400, rest_days: 160}
fate.get_days_by_types(2019) // {labor_days: 261, rest_days: 104}
Подсчет ведется без учета праздников - просто субботы/воскресенья в одну кучу, остальное - в другую. Ожидается начальная дата и (опционально) дата прерывания (входит в подсчет, если ее нет - считаются все дни до конца года). Можно просто передать полный год - тогда будут считаться дни в течение всего года.



Журнал версий

Версия 2.0

  • Добавлены функции get_days_by_types, get_season_beginning, get_season_ending, get_quarter, get_quarter_beginning, get_quarter_ending.
  • Обновлена функция get_ru_season.

Версия 1.0

  • Есть вышеуказанные массивы months_nominative_ru, months_genitive_ru, dotw_ru.
  • Есть вышеописанные функции get_mr_date, get_ru_time, get_mr_now, get_full_date_component, get_date_diff, is_leap, date2time, get_year_beginning, get_year_ending, get_full_weeks, get_ru_season.