@kalender/core
Version:
calendar core library
89 lines (75 loc) • 2.02 kB
text/typescript
import { WeekDay } from './definition';
import { daysOfMonth } from './month';
export function isWorkDay(date: Date) {
const day = date.getDay();
return day >= 1 && day <= 5;
}
export function isWeekend(date: Date) {
const day = date.getDay();
return day === 6 || day === 0;
}
export function getWeekDay(date: Date) {
const day = date.getDay();
return day === 0 ? 7 : (day as WeekDay);
}
export function getMonth(date: Date) {
return date.getMonth() + 1;
}
export function eraseTime(date: Date) {
const { year, month, day } = extract(date);
return normalDate(year, month, day);
}
export function extract(date: Date) {
return {
year: date.getFullYear(),
month: getMonth(date),
day: date.getDate(),
weekDay: getWeekDay(date),
dayOfYear: dayOfYear(date),
hour: date.getHours(),
minute: date.getMinutes(),
second: date.getSeconds(),
};
}
export function extractDate(date: Date) {
return {
year: date.getFullYear(),
month: getMonth(date),
day: date.getDate(),
weekDay: getWeekDay(date),
};
}
export function normalDate(year: number, month: number, day: number = 1) {
return new Date(year, month - 1, day);
}
export function perfectDate(year: number, month: number, day: number = 1) {
if (day > 0) {
return normalDate(year, month, day);
}
const maxDay = daysOfMonth(year, month);
if (day === 0) day = -1;
return normalDate(year, month, day + maxDay + 1);
}
export function dayOfYear(date: Date) {
const firstDay = normalDate(date.getFullYear(), 1, 1);
return (date.valueOf() - firstDay.valueOf()) / 1000 / 3600 / 24 + 1;
}
export function addWeekDays(day: WeekDay, count: number) {
count = count % 7;
day = day + count;
if (day < 0) {
day += 7;
}
if (day > 7) {
day -= 7;
}
return day;
}
export function now() {
return new Date();
}
export function daysRemainOfMonth(date: Date) {
const { year, month, day } = extract(date);
const days = daysOfMonth(year, month);
return days - day;
}