UNPKG

2.29 kBJavaScriptView Raw
1const XDate = require('xdate');
2
3function sameMonth(a, b) {
4 return a instanceof XDate && b instanceof XDate &&
5 a.getFullYear() === b.getFullYear() &&
6 a.getMonth() === b.getMonth();
7}
8
9function sameDate(a, b) {
10 return a instanceof XDate && b instanceof XDate &&
11 a.getFullYear() === b.getFullYear() &&
12 a.getMonth() === b.getMonth() &&
13 a.getDate() === b.getDate();
14}
15
16function isGTE(a, b) {
17 return b.diffDays(a) > -1;
18}
19
20function isLTE(a, b) {
21 return a.diffDays(b) > -1;
22}
23
24function fromTo(a, b) {
25 const days = [];
26 let from = +a, to = +b;
27 for (; from <= to; from = new XDate(from, true).addDays(1).getTime()) {
28 days.push(new XDate(from, true));
29 }
30 return days;
31}
32
33function month(xd) {
34 const year = xd.getFullYear(), month = xd.getMonth();
35 const days = new Date(year, month + 1, 0).getDate();
36
37 const firstDay = new XDate(year, month, 1, 0, 0, 0, true);
38 const lastDay = new XDate(year, month, days, 0, 0, 0, true);
39
40 return fromTo(firstDay, lastDay);
41}
42
43function weekDayNames(firstDayOfWeek = 0) {
44 let weekDaysNames = XDate.locales[XDate.defaultLocale].dayNamesShort;
45 const dayShift = firstDayOfWeek % 7;
46 if (dayShift) {
47 weekDaysNames = weekDaysNames.slice(dayShift).concat(weekDaysNames.slice(0, dayShift));
48 }
49 return weekDaysNames;
50}
51
52function page(xd, firstDayOfWeek, showSixWeeks) {
53 const days = month(xd);
54 let before = [], after = [];
55
56 const fdow = ((7 + firstDayOfWeek) % 7) || 7;
57 const ldow = (fdow + 6) % 7;
58
59 firstDayOfWeek = firstDayOfWeek || 0;
60
61 const from = days[0].clone();
62 const daysBefore = from.getDay();
63
64 if (from.getDay() !== fdow) {
65 from.addDays(-(from.getDay() + 7 - fdow) % 7);
66 }
67
68 const to = days[days.length - 1].clone();
69 const day = to.getDay();
70 if (day !== ldow) {
71 to.addDays((ldow + 7 - day) % 7);
72 }
73
74 const daysForSixWeeks = (((daysBefore + days.length) / 6) >= 6);
75
76 if (showSixWeeks && !daysForSixWeeks) {
77 to.addDays(7);
78 }
79
80 if (isLTE(from, days[0])) {
81 before = fromTo(from, days[0]);
82 }
83
84 if (isGTE(to, days[days.length - 1])) {
85 after = fromTo(days[days.length - 1], to);
86 }
87
88 return before.concat(days.slice(1, days.length - 1), after);
89}
90
91module.exports = {
92 weekDayNames,
93 sameMonth,
94 sameDate,
95 month,
96 page,
97 fromTo,
98 isLTE,
99 isGTE
100};