UNPKG

newmax-utils

Version:
264 lines (263 loc) 14.3 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Moment = void 0; const moment_1 = __importDefault(require("moment")); const ApiError_1 = require("../ApiError"); moment_1.default.locale('ru'); class MomentExtension { typesOfTime; constructor() { this.typesOfTime = { year: 'year', month: 'month', quarter: 'quarter', week: 'isoWeek', day: 'day', }; } /** * Возвращает timestamp начала текущего дня * @returns {number} timestamp начала текущего дня */ getTodayTimestamp() { return (0, moment_1.default)().startOf('day').valueOf(); } /** * Возвращает timestamp начала вчерашнего дня * @returns {number} timestamp начала вчерашнего дня */ getYesterdayTimestamp() { return (0, moment_1.default)().subtract(1, 'day').startOf('day').valueOf(); } /** * Возвращает timestamp начала прошлой недели * @returns {number} timestamp начала прошлой недели */ getLastWeekdayTimestamp() { return (0, moment_1.default)().subtract(7, 'days').startOf('week').valueOf(); } /** * Возвращает timestamp начала прошлой недели * @returns {number} timestamp начала прошлой недели */ getEndLastWeekdayTimestamp() { return (0, moment_1.default)().subtract(7, 'days').endOf('week').valueOf(); } /** * Преобразует дату в формат "YYYY-MM-DD" * @param {string} date - Дата в формате "DD.MM.YYYY" | "DD.MM.YYYYTHH:mm:ssZ" * @returns {string} Дата в формате "YYYY-MM-DD" */ reverseToSplash(date) { return (0, moment_1.default)(date, 'DD.MM.YYYY').format('YYYY-MM-DD'); } /** * Преобразует дату в формат "DD.MM.YYYY" * @param {string} date - Дата в формате "YYYY-MM-DD" | "YYYY-MM-DDTHH:mm:ssZ" * @returns {string} Дата в формате "DD.MM.YYYY" */ reverseToDotted(date) { return (0, moment_1.default)(date, 'YYYY-MM-DD').format('DD.MM.YYYY'); } /** * Получаем точный timestamp даты * (используем только, когда нужен timestamp с секундами) иначе используем метод startDate * @param {!string} date - Дата в формате передаваемой маски. * @param {string} [mask=undefined] - Формат маски на входе. Например: "2024-01-01T21:12:18Z". (optional) * @param {string} [format=x] - Формат маски на выходе. Default: "x". (optional) * @returns {string} Дата в формате "x" * @example * convertDateToTimestamp("2024-01-01") // 1704056400000 * convertDateToTimestamp("2024-01-01T12:00:00", "YYYY-MM-DDTHH:mm:ss", "x") // 1704099600000 */ convertDateToTimestamp(date, mask = undefined, format = 'x') { return (0, moment_1.default)(date, mask).format(format); } /** * Преобразует timestamp в нужный формат даты. Default: 'YYYY-MM-DD' * @param {!string|number} date - Timestamp даты. * @param {string} [mask=x] - Формат маски на входе. Например: "x" | "X". (optional) * @param {string} [format=YYYY-MM-DD] - Формат маски на выходе. Default: "YYYY-MM-DD". (optional) * @returns {string} Дата в формате "YYYY-MM-DD" */ convertTimestampToDate(date, mask = 'x', format = 'YYYY-MM-DD') { return (0, moment_1.default)(date, mask).format(format); } /** * Преобразует текущую дату в нужный формат. Default: 'YYYY-MM-DD' * @param {string} [format=YYYY-MM-DD] - Формат маски на выходе. Defaults: "YYYY-MM-DD". (optional) * @returns {string} Дата в формате "YYYY-MM-DD" */ formatCurrentDate(format = 'YYYY-MM-DD') { return (0, moment_1.default)().format(format); } /** * Преобразует входящую дату в нужный формат. Default: 'YYYY-MM-DD' * @param {!string|number} date - Дата в формате передаваемой маски. * @param {!string} mask - Формат маски на входе. (required) * @param {string} [format=YYYY-MM-DD] - Формат маски на выходе. Defaults: "YYYY-MM-DD". (optional) * @returns {string} The formatted date. */ formatDateTo(date, mask, format = 'YYYY-MM-DD') { return (0, moment_1.default)(date, mask).format(format); } /** * Форматирует дату в формате временной зоны. * @param {!string|number} date - Дата в формате передаваемой маски. * @param {string} [mask=undefined] - Формат маски на входе. * @returns {string} Дата в формате "YYYY-MM-DDTHH:mm:ss". */ formatDateToTimezone(date, mask = undefined) { return (0, moment_1.default)(date, mask).format('YYYY-MM-DDTHH:mm:ss'); } /** * Возвращает начало дня для указанной даты. * @param {!string|number} date - Дата в формате передаваемой маски. * @param {!string} mask - Формат маски на входе. * @param {string} [format=YYYY-MM-DDTHH:mm:ss] - Формат маски на выходе. Default: "YYYY-MM-DDTHH:mm:ss". * @param {string} type - Тип окончания * @returns {string} Начало дня в указанном формате. */ startDate(date, mask, format = 'YYYY-MM-DDTHH:mm:ss', type = 'day') { return (0, moment_1.default)(date, mask).startOf(type).format(format); } /** * Возвращает конец дня для указанной даты. * @param {!string|number} date - Дата в формате передаваемой маски. * @param {!string} mask - Формат маски на входе. * @param {string} [format=YYYY-MM-DDTHH:mm:ss] - Формат маски на выходе. Default: "YYYY-MM-DDTHH:mm:ss". * @param {string} type - Тип окончания * @returns {string} Конец дня в указанном формате. */ endDate(date, mask, format = 'YYYY-MM-DDTHH:mm:ss', type = 'day') { return (0, moment_1.default)(date, mask).endOf(type).format(format); } /** * Возвращает начало указанного типа времени для текущей даты. * @param {!string} type - Тип времени. * @param {string} [format=YYYY-MM-DD] - Формат маски на выходе. Default: "YYYY-MM-DD". * @returns {string} Начало указанного типа времени в указанном формате. */ currentStartDateOf(type, format = 'YYYY-MM-DD') { if (!this.typesOfTime[type]) throw new ApiError_1.ApiError(400, 'Такого типа не существует'); return (0, moment_1.default)() .startOf(this.typesOfTime[type]) .format(format); } /** * Возвращает конец указанного типа времени для текущей даты. * @param {!string} type - Тип времени. * @param {string} [format=YYYY-MM-DD] - Формат маски на выходе. Default: "YYYY-MM-DD". * @returns {string} Конец указанного типа времени в указанном формате. */ currentEndDateOf(type, format = 'YYYY-MM-DD') { if (!this.typesOfTime[type]) throw new ApiError_1.ApiError(400, 'Такого типа не существует'); return (0, moment_1.default)() .endOf(this.typesOfTime[type]) .format(format); } /** * Добавляет указанное количество единиц времени к текущей дате. * @param {!number} amount - Количество единиц времени. * @param {!string} type - Единица времени. Default: "day". * @param {string} [format=YYYY-MM-DD] - Формат маски на выходе. Default: "YYYY-MM-DD". * @returns {string} Дата в указанном формате. */ addToCurrentDate(amount, type, format = 'YYYY-MM-DD') { return (0, moment_1.default)() .add(amount, type) .startOf('day') .format(format); } /** * Отнимает указанное количество единиц времени от текущей даты. * @param {!number} amount - Количество единиц времени. * @param {!string} type - Единица времени. Default: "day". * @param {string} [format=YYYY-MM-DD] - Формат маски на выходе. Default: "YYYY-MM-DD". * @returns {string} Дата в указанном формате. */ subtractToCurrentDate(amount, type, format = 'YYYY-MM-DD') { return (0, moment_1.default)() .subtract(amount, type) .startOf('day') .format(format); } /** * Добавляет указанное количество единиц времени к указанной дате. * @param {!string|number} date - Дата в формате передаваемой маски. * @param {!string} mask - Формат маски на входе. * @param {!number} amount - Количество единиц времени. * @param {!string} type - Единица времени. Default: "day". * @param {string} [format=YYYY-MM-DD] - Формат маски на выходе. Default: "YYYY-MM-DD". * @returns {string} Дата в указанном формате. */ addToDate(date, mask, amount, type, format = 'YYYY-MM-DD') { return (0, moment_1.default)(date, mask) .add(amount, type) .startOf('day') .format(format); } /** * Отнимает указанное количество единиц времени от указанной даты. * @param {!string|number} date - Дата в формате передаваемой маски. * @param {!string} mask - Формат маски на входе. * @param {!number} amount - Количество единиц времени. * @param {!string} type - Единица времени. Default: "day". * @param {string} [format=YYYY-MM-DD] - Формат маски на выходе. Default: "YYYY-MM-DD". * @returns {string} Дата в указанном формате. */ subtractToDate(date, mask, amount, type, format = 'YYYY-MM-DD') { return (0, moment_1.default)(date, mask) .subtract(amount, type) .startOf('day') .format(format); } /** * Добавляет указанное количество единиц времени к указанной дате. * @param {!string} date - Дата в формате "YYYY-MM-DD". * @param {!number} amount - Количество единиц времени. * @param {string} [type=day] - Единица времени. Default: "day". * @param {string} [format=YYYY-MM-DD] - Формат маски на выходе. Default: "YYYY-MM-DD". * @returns {string} Дата в указанном формате. */ addToSplashDate(date, amount, type = 'day', format = 'YYYY-MM-DD') { return (0, moment_1.default)((0, moment_1.default)(date, 'YYYY-MM-DD').add(amount, type)).format(format); } /** * Отнимает указанное количество единиц времени от указанной даты. * @param {!string} date - Дата в формате "YYYY-MM-DD". * @param {!number} amount - Количество единиц времени. * @param {string} [type=day] - Единица времени. Default: "day". * @param {string} [format=YYYY-MM-DD] - Формат маски на выходе. Default: "YYYY-MM-DD". * @returns {string} Дата в указанном формате. */ subtractToSplashDate(date, amount, type = 'day', format = 'YYYY-MM-DD') { return (0, moment_1.default)((0, moment_1.default)(date, 'YYYY-MM-DD').subtract(amount, type)).format(format); } /** * Проверяет валидность даты в формате "YYYY-MM-DD". * @param {!string} date - Дата в формате "YYYY-MM-DD". * @param {string} [mask=YYYY-MM-DD] - Формат маски на входе. Default: "YYYY-MM-DD" * @returns {boolean} Результат проверки. */ validateSplashDate(date, mask = 'YYYY-MM-DD') { return (0, moment_1.default)(date, mask, true).isValid(); } /** * Вычисляет разницу между двумя датами в указанной единице времени. * @param {!string} date1 - Первая дата в указанном формате. * @param {!string} date2 - Вторая дата в указанном формате. * @param {string} [type=day] - Единица времени. Default: "day". * @param {string} [mask=YYYY-MM-DD] - Формат дат. Default: "YYYY-MM-DD". * @returns {number} Разница между двумя датами в указанной единице времени. */ diffDate(date1, date2, type = 'day', mask = 'YYYY-MM-DD') { return (0, moment_1.default)(date1, mask).diff((0, moment_1.default)(date2, mask), type); } } exports.Moment = new MomentExtension();