newmax-utils
Version:
Utils & Libs for Newmax Tech
264 lines (263 loc) • 14.3 kB
JavaScript
;
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();