2022-09-23 20:15:08 +03:00
|
|
|
import moment from 'moment-timezone';
|
|
|
|
|
|
|
|
export function add(date, quantity, unit) {
|
|
|
|
return moment(date)
|
|
|
|
.add(quantity, unit)
|
|
|
|
.toDate();
|
|
|
|
}
|
|
|
|
|
|
|
|
export function formatDate(date, format, locale = null) {
|
|
|
|
if (locale) {
|
|
|
|
return withLocale(locale, () => moment(date).format(format));
|
|
|
|
} else {
|
|
|
|
return moment(date).format(format);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export function startOf(date, unit) {
|
|
|
|
return moment(date)
|
|
|
|
.startOf(unit)
|
|
|
|
.toDate();
|
|
|
|
}
|
|
|
|
|
|
|
|
export function endOf(date, unit) {
|
|
|
|
return moment(date)
|
|
|
|
.endOf(unit)
|
|
|
|
.toDate();
|
|
|
|
}
|
|
|
|
|
|
|
|
export function weekday(date) {
|
|
|
|
return moment(date).weekday();
|
|
|
|
}
|
|
|
|
|
|
|
|
export function isoWeekday(date) {
|
|
|
|
return moment(date).isoWeekday();
|
|
|
|
}
|
|
|
|
|
|
|
|
export function getWeekdaysShort() {
|
|
|
|
return moment.weekdaysShort();
|
|
|
|
}
|
|
|
|
|
|
|
|
export function getWeekdaysMin() {
|
|
|
|
return moment.weekdaysMin();
|
|
|
|
}
|
|
|
|
|
|
|
|
export function getWeekdays() {
|
|
|
|
return moment.weekdays();
|
|
|
|
}
|
|
|
|
|
|
|
|
export function isAfter(date1, date2) {
|
|
|
|
return moment(date1).isAfter(date2);
|
|
|
|
}
|
|
|
|
|
|
|
|
export function isBefore(date1, date2) {
|
|
|
|
return moment(date1).isBefore(date2);
|
|
|
|
}
|
|
|
|
|
|
|
|
export function isSame(date1, date2, unit) {
|
|
|
|
return moment(date1).isSame(date2, unit);
|
|
|
|
}
|
|
|
|
|
|
|
|
export function isBetween(date, start, end, unit, inclusivity) {
|
|
|
|
return moment(date).isBetween(start, end, unit, inclusivity);
|
|
|
|
}
|
|
|
|
|
|
|
|
export function diff(date1, date2) {
|
|
|
|
return moment(date1).diff(date2);
|
|
|
|
}
|
|
|
|
|
|
|
|
export function normalizeDate(dateOrMoment) {
|
|
|
|
if (
|
|
|
|
dateOrMoment === undefined ||
|
|
|
|
dateOrMoment === null ||
|
|
|
|
dateOrMoment === '' ||
|
|
|
|
dateOrMoment instanceof Date
|
|
|
|
) {
|
|
|
|
return dateOrMoment;
|
|
|
|
} else {
|
|
|
|
return dateOrMoment.toDate();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export function normalizeRangeActionValue(val) {
|
|
|
|
return {
|
|
|
|
date: val.date,
|
|
|
|
moment: {
|
|
|
|
start: val.date.start ? moment(val.date.start) : val.date.start,
|
|
|
|
end: val.date.end ? moment(val.date.end) : val.date.end
|
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
export function normalizeMultipleActionValue(val) {
|
|
|
|
return {
|
|
|
|
date: val.date,
|
|
|
|
moment: val.date ? val.date.map(e => moment(e)) : val.date
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
export function normalizeCalendarDay(day) {
|
|
|
|
day.moment = moment(day.date);
|
|
|
|
return day;
|
|
|
|
}
|
|
|
|
|
|
|
|
export function withLocale(locale, fn) {
|
|
|
|
let returnValue;
|
|
|
|
if (locale) {
|
|
|
|
let previousLocale = moment.locale();
|
|
|
|
moment.locale(locale);
|
|
|
|
returnValue = fn();
|
|
|
|
moment.locale(previousLocale);
|
|
|
|
} else {
|
|
|
|
returnValue = fn();
|
|
|
|
}
|
|
|
|
return returnValue;
|
|
|
|
}
|
|
|
|
|
|
|
|
export function normalizeCalendarValue(value) {
|
|
|
|
if (value) {
|
|
|
|
return {date: value.date, moment: value.date ? moment(value.date) : undefined};
|
|
|
|
}
|
|
|
|
return {date: undefined, moment: undefined};
|
|
|
|
}
|
|
|
|
|
|
|
|
export function normalizeDuration(value) {
|
|
|
|
if (value === null) {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
if (moment.isDuration(value)) {
|
|
|
|
return value.asMilliseconds();
|
|
|
|
}
|
|
|
|
if (typeof value === 'number') {
|
|
|
|
return value;
|
|
|
|
}
|
|
|
|
if (typeof value === 'string') {
|
|
|
|
let [, quantity, units] = value.match(/(\d+)(.*)/);
|
|
|
|
units = units.trim() || 'days';
|
|
|
|
return moment.duration(parseInt(quantity, 10), units).asMilliseconds();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export function getDefaultLocale() {
|
|
|
|
return moment.locale();
|
|
|
|
}
|
|
|
|
|
|
|
|
export function localeStartOfWeek(locale) {
|
|
|
|
let now = new Date();
|
|
|
|
let day = withLocale(locale, () => formatDate(startOf(now, 'week'), 'dddd'));
|
|
|
|
let idx = withLocale(locale, getWeekdays).indexOf(day);
|
|
|
|
return idx >= 0 ? idx : 0;
|
|
|
|
}
|
|
|
|
|
2022-09-24 14:36:34 +03:00
|
|
|
export function startOfWeek(day, _startOfWeek) {
|
|
|
|
while (isoWeekday(day) % 7 !== _startOfWeek) {
|
2022-09-23 20:15:08 +03:00
|
|
|
day = add(day, -1, 'day');
|
|
|
|
}
|
|
|
|
return day;
|
|
|
|
}
|
|
|
|
|
2022-09-24 14:36:34 +03:00
|
|
|
export function endOfWeek(day, _startOfWeek) {
|
|
|
|
let eow = (_startOfWeek + 6) % 7;
|
2022-09-23 20:15:08 +03:00
|
|
|
while (isoWeekday(day) % 7 !== eow) {
|
|
|
|
day = add(day, 1, 'day');
|
|
|
|
}
|
|
|
|
return day;
|
|
|
|
}
|