calendar-utils
Version:
Utility functions to generate views for calendars
123 lines • 4.2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.adapterFactory = adapterFactory;
function adapterFactory(luxon) {
/* istanbul ignore next */
function coerceDateTime(date) {
return typeof date === 'number'
? luxon.DateTime.fromMillis(date)
: luxon.DateTime.fromJSDate(date);
}
function addDays(date, amount) {
return coerceDateTime(date).plus({ days: amount }).toJSDate();
}
function addHours(date, amount) {
return coerceDateTime(date).plus({ hours: amount }).toJSDate();
}
function addMinutes(date, amount) {
return coerceDateTime(date).plus({ minutes: amount }).toJSDate();
}
function addSeconds(date, amount) {
return coerceDateTime(date).plus({ seconds: amount }).toJSDate();
}
function differenceInDays(dateLeft, dateRight) {
return Math.trunc(coerceDateTime(dateLeft).diff(coerceDateTime(dateRight)).as('days'));
}
function differenceInMinutes(dateLeft, dateRight) {
return Math.trunc(coerceDateTime(dateLeft).diff(coerceDateTime(dateRight)).as('minutes'));
}
function differenceInSeconds(dateLeft, dateRight) {
return Math.trunc(coerceDateTime(dateLeft).diff(coerceDateTime(dateRight)).as('seconds'));
}
function endOfDay(date) {
return coerceDateTime(date).endOf('day').toJSDate();
}
function endOfMonth(date) {
return coerceDateTime(date).endOf('month').toJSDate();
}
function endOfWeek(date) {
return coerceDateTime(date)
.endOf('week', { useLocaleWeeks: true })
.toJSDate();
}
function getDay(date) {
// Luxon uses ISO 8601 weekday numbers, with 1 as Monday and 7 as Sunday
// https://moment.github.io/luxon/api-docs/index.html#datetimeweekday
return coerceDateTime(date).weekday % 7;
}
/* istanbul ignore next */
function getMonth(date) {
// Luxon uses 1-based indexing for months
// https://moment.github.io/luxon/api-docs/index.html#datetimemonth
return coerceDateTime(date).month - 1;
}
function isSameDay(dateLeft, dateRight) {
return coerceDateTime(dateLeft).hasSame(coerceDateTime(dateRight), 'day');
}
function isSameMonth(dateLeft, dateRight) {
return coerceDateTime(dateLeft).hasSame(coerceDateTime(dateRight), 'month');
}
function isSameSecond(dateLeft, dateRight) {
return coerceDateTime(dateLeft).hasSame(coerceDateTime(dateRight), 'second');
}
function max(dates) {
return luxon.DateTime.max(...dates.map((date) => coerceDateTime(date))).toJSDate();
}
function setHours(date, hours) {
return coerceDateTime(date).set({ hour: hours }).toJSDate();
}
function setMinutes(date, minutes) {
return coerceDateTime(date).set({ minute: minutes }).toJSDate();
}
function startOfDay(date) {
return coerceDateTime(date).startOf('day').toJSDate();
}
function startOfMinute(date) {
return coerceDateTime(date).startOf('minute').toJSDate();
}
function startOfMonth(date) {
return coerceDateTime(date).startOf('month').toJSDate();
}
function startOfWeek(date) {
return coerceDateTime(date)
.startOf('week', { useLocaleWeeks: true })
.toJSDate();
}
function getHours(date) {
return coerceDateTime(date).hour;
}
function getMinutes(date) {
return coerceDateTime(date).minute;
}
function getTimezoneOffset(date) {
return coerceDateTime(date).offset * -1;
}
return {
addDays,
addHours,
addMinutes,
addSeconds,
differenceInDays,
differenceInMinutes,
differenceInSeconds,
endOfDay,
endOfMonth,
endOfWeek,
getDay,
getMonth,
isSameDay,
isSameMonth,
isSameSecond,
max,
setHours,
setMinutes,
startOfDay,
startOfMinute,
startOfMonth,
startOfWeek,
getHours,
getMinutes,
getTimezoneOffset,
};
}
//# sourceMappingURL=index.js.map