@kalender/core
Advanced tools
Comparing version 0.3.1-alpha.4 to 0.3.2-alpha.0
@@ -0,3 +1,6 @@ | ||
import { WeekDay } from "./date-tools"; | ||
import { CalendarDate, CalendarEvent } from "./event"; | ||
export declare function getCalendarMonth(year: number, month: number, events?: CalendarEvent[]): CalendarDate[]; | ||
export declare function getCalendarWeek(date: Date, events?: CalendarEvent[], startOfWeek?: Exclude<WeekDay, WeekDay.WorkDay | WeekDay.Weekend>): CalendarDate[]; | ||
export declare function getCalendarDay(date: Date, events?: CalendarEvent[]): CalendarDate; | ||
//# sourceMappingURL=calendar.d.ts.map |
@@ -19,2 +19,3 @@ import { WeekDay } from './definition'; | ||
export declare function dayOfYear(date: Date): number; | ||
export declare function addWeekDays(day: WeekDay, count: number): WeekDay; | ||
//# sourceMappingURL=date.d.ts.map |
import { WeekDay } from './definition'; | ||
export declare function daysOfMonth(year: number, month: number): number; | ||
export declare function getMonthDates(year: number, month: number): Date[]; | ||
export declare function getCalendarMonthDates(year: number, month: number): Date[]; | ||
export declare function getCalendarMonthDates(year: number, month: number, startOfWeek?: Exclude<WeekDay, WeekDay.WorkDay | WeekDay.Weekend>): Date[]; | ||
export declare function addMonths({ year, month, }: { | ||
@@ -6,0 +6,0 @@ year: number; |
@@ -43,2 +43,13 @@ 'use strict'; | ||
} | ||
function addWeekDays(day, count) { | ||
count = count % 7; | ||
day = day + count; | ||
if (day < 0) { | ||
day += 7; | ||
} | ||
if (day > 7) { | ||
day -= 7; | ||
} | ||
return day; | ||
} | ||
@@ -195,9 +206,9 @@ (function (TimeUnits) { | ||
} | ||
function getCalendarMonthDates(year, month) { | ||
function getCalendarMonthDates(year, month, startOfWeek = exports.WeekDay.Monday) { | ||
const days = getMonthDates(year, month); | ||
while (getWeekDay(days[0]) > 1) { | ||
while (getWeekDay(days[0]) !== startOfWeek) { | ||
const day = extract(days[0]); | ||
days.unshift(normalDate(day.year, day.month, day.day - 1)); | ||
} | ||
while (getWeekDay(lastOf(days)) !== 7) { | ||
while (getWeekDay(lastOf(days)) !== addWeekDays(startOfWeek, -1)) { | ||
const day = extract(lastOf(days)); | ||
@@ -465,2 +476,15 @@ days.push(normalDate(day.year, day.month, day.day + 1)); | ||
function getCalendarWeekDates(date, startOfWeek = exports.WeekDay.Monday) { | ||
const days = [date]; | ||
while (getWeekDay(days[0]) !== startOfWeek) { | ||
const day = extract(days[0]); | ||
days.unshift(normalDate(day.year, day.month, day.day - 1)); | ||
} | ||
while (getWeekDay(lastOf(days)) !== addWeekDays(startOfWeek, -1)) { | ||
const day = extract(lastOf(days)); | ||
days.push(normalDate(day.year, day.month, day.day + 1)); | ||
} | ||
return days; | ||
} | ||
function getCalendarMonth(year, month, events = []) { | ||
@@ -483,2 +507,33 @@ const days = getCalendarMonthDates(year, month); | ||
} | ||
function getCalendarWeek(date, events = [], startOfWeek = exports.WeekDay.Monday) { | ||
const days = getCalendarWeekDates(date, startOfWeek); | ||
return days.map((day) => { | ||
return { | ||
date: day, | ||
day: day.getDate(), | ||
events: events | ||
.filter((e) => isEventMatch(day, e)) | ||
.sort((a, b) => { | ||
return (a.start.hour * 3600 + | ||
a.start.minute * 60 + | ||
a.start.second - | ||
(b.start.hour * 3600 + b.start.minute * 60 + b.start.second)); | ||
}), | ||
}; | ||
}); | ||
} | ||
function getCalendarDay(date, events = []) { | ||
return { | ||
date: date, | ||
day: date.getDate(), | ||
events: events | ||
.filter((e) => isEventMatch(date, e)) | ||
.sort((a, b) => { | ||
return (a.start.hour * 3600 + | ||
a.start.minute * 60 + | ||
a.start.second - | ||
(b.start.hour * 3600 + b.start.minute * 60 + b.start.second)); | ||
}), | ||
}; | ||
} | ||
@@ -492,2 +547,3 @@ setupHandlers(); | ||
exports.addMonths = addMonths; | ||
exports.addWeekDays = addWeekDays; | ||
exports.createEvent = createEvent; | ||
@@ -504,4 +560,6 @@ exports.createEvents = createEvents; | ||
exports.extract = extract; | ||
exports.getCalendarDay = getCalendarDay; | ||
exports.getCalendarMonth = getCalendarMonth; | ||
exports.getCalendarMonthDates = getCalendarMonthDates; | ||
exports.getCalendarWeek = getCalendarWeek; | ||
exports.getDefault = getDefault; | ||
@@ -508,0 +566,0 @@ exports.getMonth = getMonth; |
@@ -39,2 +39,13 @@ function isWorkDay(date) { | ||
} | ||
function addWeekDays(day, count) { | ||
count = count % 7; | ||
day = day + count; | ||
if (day < 0) { | ||
day += 7; | ||
} | ||
if (day > 7) { | ||
day -= 7; | ||
} | ||
return day; | ||
} | ||
@@ -194,9 +205,9 @@ var TimeUnits; | ||
} | ||
function getCalendarMonthDates(year, month) { | ||
function getCalendarMonthDates(year, month, startOfWeek = WeekDay.Monday) { | ||
const days = getMonthDates(year, month); | ||
while (getWeekDay(days[0]) > 1) { | ||
while (getWeekDay(days[0]) !== startOfWeek) { | ||
const day = extract(days[0]); | ||
days.unshift(normalDate(day.year, day.month, day.day - 1)); | ||
} | ||
while (getWeekDay(lastOf(days)) !== 7) { | ||
while (getWeekDay(lastOf(days)) !== addWeekDays(startOfWeek, -1)) { | ||
const day = extract(lastOf(days)); | ||
@@ -465,2 +476,15 @@ days.push(normalDate(day.year, day.month, day.day + 1)); | ||
function getCalendarWeekDates(date, startOfWeek = WeekDay.Monday) { | ||
const days = [date]; | ||
while (getWeekDay(days[0]) !== startOfWeek) { | ||
const day = extract(days[0]); | ||
days.unshift(normalDate(day.year, day.month, day.day - 1)); | ||
} | ||
while (getWeekDay(lastOf(days)) !== addWeekDays(startOfWeek, -1)) { | ||
const day = extract(lastOf(days)); | ||
days.push(normalDate(day.year, day.month, day.day + 1)); | ||
} | ||
return days; | ||
} | ||
function getCalendarMonth(year, month, events = []) { | ||
@@ -483,6 +507,37 @@ const days = getCalendarMonthDates(year, month); | ||
} | ||
function getCalendarWeek(date, events = [], startOfWeek = WeekDay.Monday) { | ||
const days = getCalendarWeekDates(date, startOfWeek); | ||
return days.map((day) => { | ||
return { | ||
date: day, | ||
day: day.getDate(), | ||
events: events | ||
.filter((e) => isEventMatch(day, e)) | ||
.sort((a, b) => { | ||
return (a.start.hour * 3600 + | ||
a.start.minute * 60 + | ||
a.start.second - | ||
(b.start.hour * 3600 + b.start.minute * 60 + b.start.second)); | ||
}), | ||
}; | ||
}); | ||
} | ||
function getCalendarDay(date, events = []) { | ||
return { | ||
date: date, | ||
day: date.getDate(), | ||
events: events | ||
.filter((e) => isEventMatch(date, e)) | ||
.sort((a, b) => { | ||
return (a.start.hour * 3600 + | ||
a.start.minute * 60 + | ||
a.start.second - | ||
(b.start.hour * 3600 + b.start.minute * 60 + b.start.second)); | ||
}), | ||
}; | ||
} | ||
setupHandlers(); | ||
export { RepeatTypes, TimeUnits, WeekDay, WeekDays, WeekendDays, WorkDays, addDays, addMonths, createEvent, createEvents, dayOfYear, daysBetween, daysOf, daysOfMonth, daysOfYear, diff, diffTime, eraseTime, extract, getCalendarMonth, getCalendarMonthDates, getDefault, getMonth, getMonthDates, getWeekDay, increaseSign, isDefined, isEventMatch, isInt, isNthWeekDay, isNum, isPositiveInt, isWeekDay, isWeekend, isWorkDay, lastOf, normalDate, nthWeekDay, parseEvents, range, registerHandler, setupHandlers, theFirstWeekDay, theLastWeekDay, theNthWeekDay, toPositiveInt, weekDayFilter, weekDaysBetween, weekendDaysBetween, weeksBetween, weeksOf, workDaysBetween }; | ||
export { RepeatTypes, TimeUnits, WeekDay, WeekDays, WeekendDays, WorkDays, addDays, addMonths, addWeekDays, createEvent, createEvents, dayOfYear, daysBetween, daysOf, daysOfMonth, daysOfYear, diff, diffTime, eraseTime, extract, getCalendarDay, getCalendarMonth, getCalendarMonthDates, getCalendarWeek, getDefault, getMonth, getMonthDates, getWeekDay, increaseSign, isDefined, isEventMatch, isInt, isNthWeekDay, isNum, isPositiveInt, isWeekDay, isWeekend, isWorkDay, lastOf, normalDate, nthWeekDay, parseEvents, range, registerHandler, setupHandlers, theFirstWeekDay, theLastWeekDay, theNthWeekDay, toPositiveInt, weekDayFilter, weekDaysBetween, weekendDaysBetween, weeksBetween, weeksOf, workDaysBetween }; | ||
//# sourceMappingURL=index.esm.js.map |
{ | ||
"name": "@kalender/core", | ||
"version": "0.3.1-alpha.4", | ||
"version": "0.3.2-alpha.0", | ||
"description": "calendar core library", | ||
@@ -13,3 +13,3 @@ "keywords": [ | ||
"scripts": { | ||
"test": "jest", | ||
"test": "jest --passWithNoTests", | ||
"lint": "eslint --fix ./src --ext .ts,.tsx", | ||
@@ -16,0 +16,0 @@ "build": "rollup -c", |
@@ -1,3 +0,4 @@ | ||
import { getCalendarMonthDates } from 'date-tools'; | ||
import { getCalendarMonthDates, WeekDay } from 'date-tools'; | ||
import { CalendarDate, CalendarEvent, isEventMatch } from 'event'; | ||
import { getCalendarWeekDates } from './date-tools/week'; | ||
@@ -27,1 +28,45 @@ export function getCalendarMonth( | ||
} | ||
export function getCalendarWeek( | ||
date: Date, | ||
events: CalendarEvent[] = [], | ||
startOfWeek: Exclude< | ||
WeekDay, | ||
WeekDay.WorkDay | WeekDay.Weekend | ||
> = WeekDay.Monday | ||
) { | ||
const days = getCalendarWeekDates(date, startOfWeek); | ||
return days.map((day) => { | ||
return { | ||
date: day, | ||
day: day.getDate(), | ||
events: events | ||
.filter((e) => isEventMatch(day, e)) | ||
.sort((a, b) => { | ||
return ( | ||
a.start.hour * 3600 + | ||
a.start.minute * 60 + | ||
a.start.second - | ||
(b.start.hour * 3600 + b.start.minute * 60 + b.start.second) | ||
); | ||
}), | ||
} as CalendarDate; | ||
}); | ||
} | ||
export function getCalendarDay(date: Date, events: CalendarEvent[] = []) { | ||
return { | ||
date: date, | ||
day: date.getDate(), | ||
events: events | ||
.filter((e) => isEventMatch(date, e)) | ||
.sort((a, b) => { | ||
return ( | ||
a.start.hour * 3600 + | ||
a.start.minute * 60 + | ||
a.start.second - | ||
(b.start.hour * 3600 + b.start.minute * 60 + b.start.second) | ||
); | ||
}), | ||
} as CalendarDate; | ||
} |
@@ -1,19 +0,26 @@ | ||
import { dayOfYear, eraseTime, normalDate } from '../date'; | ||
import { dayOfYear, eraseTime, addWeekDays, normalDate } from '../date'; | ||
describe('date.ts', () => { | ||
test('normalDate', () => { | ||
expect(normalDate(2020, 1, 30)).toEqual(new Date('2020-1-30')); | ||
}); | ||
test('normalDate', () => { | ||
expect(normalDate(2020, 1, 30)).toEqual(new Date('2020-1-30')); | ||
}); | ||
test('dayOfYear', () => { | ||
expect(dayOfYear(normalDate(2020, 1, 30))).toBe(30); | ||
expect(dayOfYear(normalDate(2020, 2, 5))).toBe(36); | ||
}); | ||
test('dayOfYear', () => { | ||
expect(dayOfYear(normalDate(2020, 1, 30))).toBe(30); | ||
expect(dayOfYear(normalDate(2020, 2, 5))).toBe(36); | ||
}); | ||
test('eraseTime', () => { | ||
expect(eraseTime(new Date('2020-10-1 10:00:00'))).toEqual( | ||
new Date('2020-10-1 00:00:00') | ||
); | ||
expect(dayOfYear(normalDate(2020, 2, 5))).toBe(36); | ||
}); | ||
test('eraseTime', () => { | ||
expect(eraseTime(new Date('2020-10-1 10:00:00'))).toEqual( | ||
new Date('2020-10-1 00:00:00') | ||
); | ||
expect(dayOfYear(normalDate(2020, 2, 5))).toBe(36); | ||
}); | ||
test('nextWeekDay', () => { | ||
expect(addWeekDays(7, 1)).toBe(1); | ||
expect(addWeekDays(7, -1)).toBe(6); | ||
expect(addWeekDays(7, -7)).toBe(7); | ||
expect(addWeekDays(7, 8)).toBe(1); | ||
}); | ||
}); |
@@ -49,1 +49,13 @@ import { WeekDay } from './definition'; | ||
} | ||
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; | ||
} |
import { | ||
eraseTime, | ||
extract, | ||
getWeekDay, | ||
isWeekend, | ||
isWorkDay, | ||
normalDate, | ||
addWeekDays, | ||
extract, | ||
getWeekDay, | ||
isWeekend, | ||
isWorkDay, | ||
normalDate, | ||
} from './date'; | ||
@@ -14,133 +14,140 @@ import { WeekDay } from './definition'; | ||
export function daysOfMonth(year: number, month: number): number { | ||
return new Date(year, month, 0).getDate(); | ||
return new Date(year, month, 0).getDate(); | ||
} | ||
export function getMonthDates(year: number, month: number): Date[] { | ||
const days: Date[] = []; | ||
for (let i = 0; i < daysOfMonth(year, month); i++) { | ||
days.push(normalDate(year, month, i + 1)); | ||
} | ||
return days; | ||
const days: Date[] = []; | ||
for (let i = 0; i < daysOfMonth(year, month); i++) { | ||
days.push(normalDate(year, month, i + 1)); | ||
} | ||
return days; | ||
} | ||
export function getCalendarMonthDates(year: number, month: number): Date[] { | ||
const days = getMonthDates(year, month); | ||
export function getCalendarMonthDates( | ||
year: number, | ||
month: number, | ||
startOfWeek: Exclude< | ||
WeekDay, | ||
WeekDay.WorkDay | WeekDay.Weekend | ||
> = WeekDay.Monday | ||
): Date[] { | ||
const days = getMonthDates(year, month); | ||
while (getWeekDay(days[0]) > 1) { | ||
const day = extract(days[0]); | ||
days.unshift(normalDate(day.year, day.month, day.day - 1)); | ||
} | ||
while (getWeekDay(days[0]) !== startOfWeek) { | ||
const day = extract(days[0]); | ||
days.unshift(normalDate(day.year, day.month, day.day - 1)); | ||
} | ||
while (getWeekDay(lastOf(days)) !== 7) { | ||
const day = extract(lastOf(days)); | ||
days.push(normalDate(day.year, day.month, day.day + 1)); | ||
} | ||
while (getWeekDay(lastOf(days)) !== addWeekDays(startOfWeek, -1)) { | ||
const day = extract(lastOf(days)); | ||
days.push(normalDate(day.year, day.month, day.day + 1)); | ||
} | ||
return days; | ||
return days; | ||
} | ||
export function addMonths( | ||
{ | ||
year, | ||
month, | ||
}: { | ||
year: number; | ||
month: number; | ||
}, | ||
count: number | ||
{ | ||
year, | ||
month, | ||
}: { | ||
year: number; | ||
month: number; | ||
}, | ||
count: number | ||
) { | ||
const { year: y, month: m } = extract(new Date(year, month + count - 1)); | ||
return { | ||
year: y, | ||
month: m, | ||
}; | ||
const { year: y, month: m } = extract(new Date(year, month + count - 1)); | ||
return { | ||
year: y, | ||
month: m, | ||
}; | ||
} | ||
export function isNthWeekDay(date: Date, weekDay: WeekDay, rank = 0) { | ||
const { year, month } = extract(date); | ||
const diff = diffTime(date, theNthWeekDay(year, month, weekDay, rank)); | ||
const { year, month } = extract(date); | ||
const diff = diffTime(date, theNthWeekDay(year, month, weekDay, rank)); | ||
return diff.year === 0 && diff.month === 0 && diff.day === 0; | ||
return diff.year === 0 && diff.month === 0 && diff.day === 0; | ||
} | ||
export function nthWeekDay(year: number, month: number) { | ||
const result: { | ||
[K: number]: Date[]; | ||
} = { | ||
[WeekDay.Monday]: [], | ||
[WeekDay.Tuesday]: [], | ||
[WeekDay.Wednesday]: [], | ||
[WeekDay.Thursday]: [], | ||
[WeekDay.Friday]: [], | ||
[WeekDay.Saturday]: [], | ||
[WeekDay.Sunday]: [], | ||
[WeekDay.WorkDay]: [], | ||
[WeekDay.Weekend]: [], | ||
}; | ||
const result: { | ||
[K: number]: Date[]; | ||
} = { | ||
[WeekDay.Monday]: [], | ||
[WeekDay.Tuesday]: [], | ||
[WeekDay.Wednesday]: [], | ||
[WeekDay.Thursday]: [], | ||
[WeekDay.Friday]: [], | ||
[WeekDay.Saturday]: [], | ||
[WeekDay.Sunday]: [], | ||
[WeekDay.WorkDay]: [], | ||
[WeekDay.Weekend]: [], | ||
}; | ||
const days = daysOfMonth(year, month); | ||
const days = daysOfMonth(year, month); | ||
for (let day = 1; day <= days; day++) { | ||
let date = normalDate(year, month, day); | ||
result[getWeekDay(date)].push(date); | ||
if (isWorkDay(date)) { | ||
result[WeekDay.WorkDay].push(date); | ||
} else { | ||
result[WeekDay.Weekend].push(date); | ||
} | ||
for (let day = 1; day <= days; day++) { | ||
let date = normalDate(year, month, day); | ||
result[getWeekDay(date)].push(date); | ||
if (isWorkDay(date)) { | ||
result[WeekDay.WorkDay].push(date); | ||
} else { | ||
result[WeekDay.Weekend].push(date); | ||
} | ||
} | ||
return result; | ||
return result; | ||
} | ||
export function theFirstWeekDay(year: number, month: number, weekDay: WeekDay) { | ||
let date = normalDate(year, month, 1); | ||
if (weekDay === WeekDay.WorkDay) { | ||
while (!isWorkDay(date)) { | ||
date = addDays(date, 1); | ||
} | ||
} else if (weekDay === WeekDay.Weekend) { | ||
while (!isWeekend(date)) { | ||
date = addDays(date, 1); | ||
} | ||
} else { | ||
while (getWeekDay(date) !== weekDay) { | ||
date = addDays(date, 1); | ||
} | ||
let date = normalDate(year, month, 1); | ||
if (weekDay === WeekDay.WorkDay) { | ||
while (!isWorkDay(date)) { | ||
date = addDays(date, 1); | ||
} | ||
} else if (weekDay === WeekDay.Weekend) { | ||
while (!isWeekend(date)) { | ||
date = addDays(date, 1); | ||
} | ||
} else { | ||
while (getWeekDay(date) !== weekDay) { | ||
date = addDays(date, 1); | ||
} | ||
} | ||
return date; | ||
return date; | ||
} | ||
export function theLastWeekDay(year: number, month: number, weekDay: WeekDay) { | ||
let date = normalDate(year, month + 1, 0); | ||
let date = normalDate(year, month + 1, 0); | ||
if (weekDay === WeekDay.WorkDay) { | ||
while (!isWorkDay(date)) { | ||
date = addDays(date, -1); | ||
} | ||
} else if (weekDay === WeekDay.Weekend) { | ||
while (!isWeekend(date)) { | ||
date = addDays(date, -1); | ||
} | ||
} else { | ||
while (getWeekDay(date) !== weekDay) { | ||
date = addDays(date, -1); | ||
} | ||
if (weekDay === WeekDay.WorkDay) { | ||
while (!isWorkDay(date)) { | ||
date = addDays(date, -1); | ||
} | ||
} else if (weekDay === WeekDay.Weekend) { | ||
while (!isWeekend(date)) { | ||
date = addDays(date, -1); | ||
} | ||
} else { | ||
while (getWeekDay(date) !== weekDay) { | ||
date = addDays(date, -1); | ||
} | ||
} | ||
return date; | ||
return date; | ||
} | ||
export function theNthWeekDay( | ||
year: number, | ||
month: number, | ||
weekDay: WeekDay, | ||
rank = 0 | ||
year: number, | ||
month: number, | ||
weekDay: WeekDay, | ||
rank = 0 | ||
) { | ||
if (rank === -1) { | ||
return theLastWeekDay(year, month, weekDay); | ||
} | ||
const weekDays = nthWeekDay(year, month); | ||
return weekDays[weekDay][rank]; | ||
if (rank === -1) { | ||
return theLastWeekDay(year, month, weekDay); | ||
} | ||
const weekDays = nthWeekDay(year, month); | ||
return weekDays[weekDay][rank]; | ||
} |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
164034
53
2113