@checkdigit/time 4.0.0-PR.18-81a3 → 4.0.0-PR.18-e0fa
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -2
- package/package.json +1 -1
- package/src/date-fns/_lib/addLeadingZeros/test.mts +0 -12
- package/src/date-fns/_lib/getRoundingMethod/test.mts +0 -50
- package/src/date-fns/_lib/getTimezoneOffsetInMilliseconds/test.mts +0 -25
- package/src/date-fns/add/test.mts +0 -95
- package/src/date-fns/addBusinessDays/test.mts +0 -78
- package/src/date-fns/addDays/test.mts +0 -90
- package/src/date-fns/addHours/test.mts +0 -30
- package/src/date-fns/addISOWeekYears/test.mts +0 -41
- package/src/date-fns/addMilliseconds/test.mts +0 -30
- package/src/date-fns/addMinutes/test.mts +0 -30
- package/src/date-fns/addMonths/test.mts +0 -123
- package/src/date-fns/addQuarters/test.mts +0 -47
- package/src/date-fns/addSeconds/test.mts +0 -30
- package/src/date-fns/addWeeks/test.mts +0 -30
- package/src/date-fns/addYears/test.mts +0 -46
- package/src/date-fns/areIntervalsOverlapping/test.mts +0 -231
- package/src/date-fns/clamp/test.mts +0 -36
- package/src/date-fns/closestIndexTo/test.mts +0 -51
- package/src/date-fns/closestTo/test.mts +0 -49
- package/src/date-fns/compareAsc/test.mts +0 -58
- package/src/date-fns/compareDesc/test.mts +0 -58
- package/src/date-fns/constructFrom/test.mts +0 -47
- package/src/date-fns/constructNow/test.mts +0 -37
- package/src/date-fns/daysToWeeks/test.mts +0 -36
- package/src/date-fns/differenceInBusinessDays/test.mts +0 -102
- package/src/date-fns/differenceInCalendarDays/test.mts +0 -206
- package/src/date-fns/differenceInCalendarISOWeekYears/test.mts +0 -93
- package/src/date-fns/differenceInCalendarISOWeeks/test.mts +0 -89
- package/src/date-fns/differenceInCalendarMonths/test.mts +0 -82
- package/src/date-fns/differenceInCalendarQuarters/test.mts +0 -82
- package/src/date-fns/differenceInCalendarWeeks/test.mts +0 -136
- package/src/date-fns/differenceInCalendarYears/test.mts +0 -82
- package/src/date-fns/differenceInDays/test.mts +0 -175
- package/src/date-fns/differenceInHours/test.mts +0 -122
- package/src/date-fns/differenceInISOWeekYears/test.mts +0 -93
- package/src/date-fns/differenceInMilliseconds/test.mts +0 -53
- package/src/date-fns/differenceInMinutes/test.mts +0 -123
- package/src/date-fns/differenceInMonths/test.mts +0 -121
- package/src/date-fns/differenceInQuarters/test.mts +0 -109
- package/src/date-fns/differenceInSeconds/test.mts +0 -144
- package/src/date-fns/differenceInWeeks/test.mts +0 -111
- package/src/date-fns/differenceInYears/test.mts +0 -97
- package/src/date-fns/eachDayOfInterval/test.mts +0 -164
- package/src/date-fns/eachHourOfInterval/test.mts +0 -154
- package/src/date-fns/eachMinuteOfInterval/test.mts +0 -159
- package/src/date-fns/eachMonthOfInterval/test.mts +0 -151
- package/src/date-fns/eachQuarterOfInterval/test.mts +0 -136
- package/src/date-fns/eachWeekOfInterval/test.mts +0 -177
- package/src/date-fns/eachWeekendOfInterval/test.mts +0 -67
- package/src/date-fns/eachWeekendOfMonth/test.mts +0 -23
- package/src/date-fns/eachWeekendOfYear/test.mts +0 -18
- package/src/date-fns/eachYearOfInterval/test.mts +0 -136
- package/src/date-fns/endOfDay/test.mts +0 -27
- package/src/date-fns/endOfDecade/test.mts +0 -32
- package/src/date-fns/endOfHour/test.mts +0 -26
- package/src/date-fns/endOfISOWeek/test.mts +0 -27
- package/src/date-fns/endOfISOWeekYear/test.mts +0 -36
- package/src/date-fns/endOfMinute/test.mts +0 -26
- package/src/date-fns/endOfMonth/test.mts +0 -41
- package/src/date-fns/endOfQuarter/test.mts +0 -27
- package/src/date-fns/endOfSecond/test.mts +0 -26
- package/src/date-fns/endOfToday/test.mts +0 -19
- package/src/date-fns/endOfTomorrow/test.mts +0 -29
- package/src/date-fns/endOfWeek/test.mts +0 -86
- package/src/date-fns/endOfYear/test.mts +0 -27
- package/src/date-fns/endOfYesterday/test.mts +0 -29
- package/src/date-fns/format/test.mts +0 -909
- package/src/date-fns/formatDistance/test.mts +0 -189
- package/src/date-fns/formatDistanceStrict/test.mts +0 -329
- package/src/date-fns/formatDistanceToNow/test.mts +0 -196
- package/src/date-fns/formatDistanceToNowStrict/test.mts +0 -293
- package/src/date-fns/formatDuration/test.mts +0 -74
- package/src/date-fns/formatISO/test.mts +0 -55
- package/src/date-fns/formatISO9075/test.mts +0 -35
- package/src/date-fns/formatISODuration/test.mts +0 -75
- package/src/date-fns/formatRFC3339/test.mts +0 -41
- package/src/date-fns/formatRFC7231/test.mts +0 -18
- package/src/date-fns/formatRelative/test.mts +0 -92
- package/src/date-fns/fp/_lib/convertToFP/test.mts +0 -114
- package/src/date-fns/fromUnixTime/test.mts +0 -14
- package/src/date-fns/getDate/test.mts +0 -19
- package/src/date-fns/getDay/test.mts +0 -19
- package/src/date-fns/getDayOfYear/test.mts +0 -27
- package/src/date-fns/getDaysInMonth/test.mts +0 -33
- package/src/date-fns/getDaysInYear/test.mts +0 -35
- package/src/date-fns/getDecade/test.mts +0 -24
- package/src/date-fns/getDefaultOptions/test.mts +0 -58
- package/src/date-fns/getHours/test.mts +0 -19
- package/src/date-fns/getISODay/test.mts +0 -24
- package/src/date-fns/getISOWeek/test.mts +0 -54
- package/src/date-fns/getISOWeekYear/test.mts +0 -27
- package/src/date-fns/getISOWeeksInYear/test.mts +0 -37
- package/src/date-fns/getMilliseconds/test.mts +0 -19
- package/src/date-fns/getMinutes/test.mts +0 -19
- package/src/date-fns/getMonth/test.mts +0 -19
- package/src/date-fns/getOverlappingDaysInIntervals/test.mts +0 -243
- package/src/date-fns/getQuarter/test.mts +0 -19
- package/src/date-fns/getSeconds/test.mts +0 -19
- package/src/date-fns/getTime/test.mts +0 -21
- package/src/date-fns/getUnixTime/test.mts +0 -26
- package/src/date-fns/getWeek/test.mts +0 -56
- package/src/date-fns/getWeekOfMonth/test.mts +0 -75
- package/src/date-fns/getWeekYear/test.mts +0 -49
- package/src/date-fns/getWeeksInMonth/test.mts +0 -51
- package/src/date-fns/getYear/test.mts +0 -19
- package/src/date-fns/hoursToMilliseconds/test.mts +0 -23
- package/src/date-fns/hoursToMinutes/test.mts +0 -25
- package/src/date-fns/hoursToSeconds/test.mts +0 -25
- package/src/date-fns/interval/test.mts +0 -42
- package/src/date-fns/intervalToDuration/test.mts +0 -235
- package/src/date-fns/intlFormat/test.mts +0 -88
- package/src/date-fns/intlFormatDistance/test.mts +0 -588
- package/src/date-fns/isAfter/test.mts +0 -39
- package/src/date-fns/isBefore/test.mts +0 -39
- package/src/date-fns/isDate/test.mts +0 -72
- package/src/date-fns/isEqual/test.mts +0 -34
- package/src/date-fns/isExists/test.mts +0 -14
- package/src/date-fns/isFirstDayOfMonth/test.mts +0 -25
- package/src/date-fns/isFriday/test.mts +0 -24
- package/src/date-fns/isFuture/test.mts +0 -34
- package/src/date-fns/isLastDayOfMonth/test.mts +0 -25
- package/src/date-fns/isLeapYear/test.mts +0 -35
- package/src/date-fns/isMatch/test.mts +0 -27
- package/src/date-fns/isMonday/test.mts +0 -24
- package/src/date-fns/isPast/test.mts +0 -34
- package/src/date-fns/isSameDay/test.mts +0 -37
- package/src/date-fns/isSameHour/test.mts +0 -37
- package/src/date-fns/isSameISOWeek/test.mts +0 -34
- package/src/date-fns/isSameISOWeekYear/test.mts +0 -48
- package/src/date-fns/isSameMinute/test.mts +0 -37
- package/src/date-fns/isSameMonth/test.mts +0 -34
- package/src/date-fns/isSameQuarter/test.mts +0 -34
- package/src/date-fns/isSameSecond/test.mts +0 -43
- package/src/date-fns/isSameWeek/test.mts +0 -58
- package/src/date-fns/isSameYear/test.mts +0 -34
- package/src/date-fns/isSaturday/test.mts +0 -24
- package/src/date-fns/isSunday/test.mts +0 -24
- package/src/date-fns/isThisHour/test.mts +0 -34
- package/src/date-fns/isThisISOWeek/test.mts +0 -34
- package/src/date-fns/isThisMinute/test.mts +0 -34
- package/src/date-fns/isThisMonth/test.mts +0 -34
- package/src/date-fns/isThisQuarter/test.mts +0 -34
- package/src/date-fns/isThisSecond/test.mts +0 -34
- package/src/date-fns/isThisWeek/test.mts +0 -39
- package/src/date-fns/isThisYear/test.mts +0 -34
- package/src/date-fns/isThursday/test.mts +0 -24
- package/src/date-fns/isToday/test.mts +0 -34
- package/src/date-fns/isTomorrow/test.mts +0 -34
- package/src/date-fns/isTuesday/test.mts +0 -24
- package/src/date-fns/isValid/test.mts +0 -24
- package/src/date-fns/isWednesday/test.mts +0 -24
- package/src/date-fns/isWeekend/test.mts +0 -24
- package/src/date-fns/isWithinInterval/test.mts +0 -92
- package/src/date-fns/isYesterday/test.mts +0 -34
- package/src/date-fns/lastDayOfDecade/test.mts +0 -32
- package/src/date-fns/lastDayOfISOWeek/test.mts +0 -27
- package/src/date-fns/lastDayOfISOWeekYear/test.mts +0 -36
- package/src/date-fns/lastDayOfMonth/test.mts +0 -41
- package/src/date-fns/lastDayOfQuarter/test.mts +0 -27
- package/src/date-fns/lastDayOfWeek/test.mts +0 -86
- package/src/date-fns/lastDayOfYear/test.mts +0 -27
- package/src/date-fns/lightFormat/test.mts +0 -126
- package/src/date-fns/max/test.mts +0 -34
- package/src/date-fns/milliseconds/test.mts +0 -62
- package/src/date-fns/millisecondsToHours/test.mts +0 -24
- package/src/date-fns/millisecondsToMinutes/test.mts +0 -24
- package/src/date-fns/millisecondsToSeconds/test.mts +0 -24
- package/src/date-fns/min/test.mts +0 -34
- package/src/date-fns/minutesToHours/test.mts +0 -24
- package/src/date-fns/minutesToMilliseconds/test.mts +0 -23
- package/src/date-fns/minutesToSeconds/test.mts +0 -23
- package/src/date-fns/monthsToQuarters/test.mts +0 -24
- package/src/date-fns/monthsToYears/test.mts +0 -24
- package/src/date-fns/nextDay/test.mts +0 -44
- package/src/date-fns/nextFriday/test.mts +0 -24
- package/src/date-fns/nextMonday/test.mts +0 -24
- package/src/date-fns/nextSaturday/test.mts +0 -24
- package/src/date-fns/nextSunday/test.mts +0 -24
- package/src/date-fns/nextThursday/test.mts +0 -24
- package/src/date-fns/nextTuesday/test.mts +0 -23
- package/src/date-fns/nextWednesday/test.mts +0 -24
- package/src/date-fns/parse/test.mts +0 -2202
- package/src/date-fns/parseISO/test.mts +0 -362
- package/src/date-fns/parseJSON/test.mts +0 -129
- package/src/date-fns/previousDay/test.mts +0 -42
- package/src/date-fns/previousFriday/test.mts +0 -22
- package/src/date-fns/previousMonday/test.mts +0 -22
- package/src/date-fns/previousSaturday/test.mts +0 -22
- package/src/date-fns/previousSunday/test.mts +0 -22
- package/src/date-fns/previousThursday/test.mts +0 -22
- package/src/date-fns/previousTuesday/test.mts +0 -22
- package/src/date-fns/previousWednesday/test.mts +0 -22
- package/src/date-fns/quartersToMonths/test.mts +0 -24
- package/src/date-fns/quartersToYears/test.mts +0 -24
- package/src/date-fns/roundToNearestHours/test.mts +0 -200
- package/src/date-fns/roundToNearestMinutes/test.mts +0 -208
- package/src/date-fns/secondsToHours/test.mts +0 -24
- package/src/date-fns/secondsToMilliseconds/test.mts +0 -14
- package/src/date-fns/secondsToMinutes/test.mts +0 -24
- package/src/date-fns/set/test.mts +0 -121
- package/src/date-fns/setDate/test.mts +0 -30
- package/src/date-fns/setDay/test.mts +0 -112
- package/src/date-fns/setDayOfYear/test.mts +0 -30
- package/src/date-fns/setDefaultOptions/test.mts +0 -498
- package/src/date-fns/setHours/test.mts +0 -30
- package/src/date-fns/setISODay/test.mts +0 -59
- package/src/date-fns/setISOWeek/test.mts +0 -41
- package/src/date-fns/setISOWeekYear/test.mts +0 -50
- package/src/date-fns/setMilliseconds/test.mts +0 -30
- package/src/date-fns/setMinutes/test.mts +0 -30
- package/src/date-fns/setMonth/test.mts +0 -46
- package/src/date-fns/setQuarter/test.mts +0 -46
- package/src/date-fns/setSeconds/test.mts +0 -30
- package/src/date-fns/setWeek/test.mts +0 -63
- package/src/date-fns/setWeekYear/test.mts +0 -72
- package/src/date-fns/setYear/test.mts +0 -30
- package/src/date-fns/startOfDay/test.mts +0 -27
- package/src/date-fns/startOfDecade/test.mts +0 -32
- package/src/date-fns/startOfHour/test.mts +0 -27
- package/src/date-fns/startOfISOWeek/test.mts +0 -27
- package/src/date-fns/startOfISOWeekYear/test.mts +0 -41
- package/src/date-fns/startOfMinute/test.mts +0 -27
- package/src/date-fns/startOfMonth/test.mts +0 -27
- package/src/date-fns/startOfQuarter/test.mts +0 -27
- package/src/date-fns/startOfSecond/test.mts +0 -27
- package/src/date-fns/startOfToday/test.mts +0 -19
- package/src/date-fns/startOfTomorrow/test.mts +0 -29
- package/src/date-fns/startOfWeek/test.mts +0 -86
- package/src/date-fns/startOfWeekYear/test.mts +0 -58
- package/src/date-fns/startOfYear/test.mts +0 -38
- package/src/date-fns/startOfYesterday/test.mts +0 -29
- package/src/date-fns/sub/test.mts +0 -83
- package/src/date-fns/subBusinessDays/test.mts +0 -40
- package/src/date-fns/subDays/test.mts +0 -30
- package/src/date-fns/subHours/test.mts +0 -30
- package/src/date-fns/subISOWeekYears/test.mts +0 -41
- package/src/date-fns/subMilliseconds/test.mts +0 -30
- package/src/date-fns/subMinutes/test.mts +0 -30
- package/src/date-fns/subMonths/test.mts +0 -47
- package/src/date-fns/subQuarters/test.mts +0 -47
- package/src/date-fns/subSeconds/test.mts +0 -30
- package/src/date-fns/subWeeks/test.mts +0 -30
- package/src/date-fns/subYears/test.mts +0 -46
- package/src/date-fns/toDate/test.mts +0 -35
- package/src/date-fns/weeksToDays/test.mts +0 -24
- package/src/date-fns/yearsToDays/test.mts +0 -24
- package/src/date-fns/yearsToMonths/test.mts +0 -24
- package/src/date-fns/yearsToQuarters/test.mts +0 -24
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import { differenceInCalendarMonths } from './index';
|
|
3
|
-
|
|
4
|
-
describe('differenceInCalendarMonths', () => {
|
|
5
|
-
it('returns the number of calendar months between the given dates', () => {
|
|
6
|
-
const result = differenceInCalendarMonths(
|
|
7
|
-
new Date(2012, 6 /* Jul */, 2, 18, 0),
|
|
8
|
-
new Date(2011, 6 /* Jul */, 2, 6, 0),
|
|
9
|
-
);
|
|
10
|
-
expect(result).toBe(12);
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
it('returns a negative number if the time value of the first date is smaller', () => {
|
|
14
|
-
const result = differenceInCalendarMonths(
|
|
15
|
-
new Date(2011, 6 /* Jul */, 2, 6, 0),
|
|
16
|
-
new Date(2012, 6 /* Jul */, 2, 18, 0),
|
|
17
|
-
);
|
|
18
|
-
expect(result).toBe(-12);
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
it('accepts timestamps', () => {
|
|
22
|
-
const result = differenceInCalendarMonths(
|
|
23
|
-
new Date(2014, 7 /* Aug */, 2).getTime(),
|
|
24
|
-
new Date(2010, 6 /* Jul */, 2).getTime(),
|
|
25
|
-
);
|
|
26
|
-
expect(result).toBe(49);
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
describe('edge cases', () => {
|
|
30
|
-
it('the difference is less than a month, but the given dates are in different calendar months', () => {
|
|
31
|
-
const result = differenceInCalendarMonths(new Date(2014, 8 /* Sep */, 1), new Date(2014, 7 /* Aug */, 31));
|
|
32
|
-
expect(result).toBe(1);
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
it('the same for the swapped dates', () => {
|
|
36
|
-
const result = differenceInCalendarMonths(new Date(2014, 7 /* Aug */, 31), new Date(2014, 8 /* Sep */, 1));
|
|
37
|
-
expect(result).toBe(-1);
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
it('the days of months of the given dates are the same', () => {
|
|
41
|
-
const result = differenceInCalendarMonths(new Date(2014, 8 /* Sep */, 6), new Date(2014, 7 /* Aug */, 6));
|
|
42
|
-
expect(result).toBe(1);
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
it('the given dates are the same', () => {
|
|
46
|
-
const result = differenceInCalendarMonths(
|
|
47
|
-
new Date(2014, 8 /* Sep */, 5, 0, 0),
|
|
48
|
-
new Date(2014, 8 /* Sep */, 5, 0, 0),
|
|
49
|
-
);
|
|
50
|
-
expect(result).toBe(0);
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
it('does not return -0 when the given dates are the same', () => {
|
|
54
|
-
function isNegativeZero(x: number): boolean {
|
|
55
|
-
return x === 0 && 1 / x < 0;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
const result = differenceInCalendarMonths(
|
|
59
|
-
new Date(2014, 8 /* Sep */, 5, 0, 0),
|
|
60
|
-
new Date(2014, 8 /* Sep */, 5, 0, 0),
|
|
61
|
-
);
|
|
62
|
-
|
|
63
|
-
const resultIsNegative = isNegativeZero(result);
|
|
64
|
-
expect(resultIsNegative).toBe(false);
|
|
65
|
-
});
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
it('returns NaN if the first date is `Invalid Date`', () => {
|
|
69
|
-
const result = differenceInCalendarMonths(new Date(NaN), new Date(2017, 0 /* Jan */, 1));
|
|
70
|
-
expect(isNaN(result)).toBe(true);
|
|
71
|
-
});
|
|
72
|
-
|
|
73
|
-
it('returns NaN if the second date is `Invalid Date`', () => {
|
|
74
|
-
const result = differenceInCalendarMonths(new Date(2017, 0 /* Jan */, 1), new Date(NaN));
|
|
75
|
-
expect(isNaN(result)).toBe(true);
|
|
76
|
-
});
|
|
77
|
-
|
|
78
|
-
it('returns NaN if the both dates are `Invalid Date`', () => {
|
|
79
|
-
const result = differenceInCalendarMonths(new Date(NaN), new Date(NaN));
|
|
80
|
-
expect(isNaN(result)).toBe(true);
|
|
81
|
-
});
|
|
82
|
-
});
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import { differenceInCalendarQuarters } from './index';
|
|
3
|
-
|
|
4
|
-
describe('differenceInCalendarQuarters', () => {
|
|
5
|
-
it('returns the number of calendar quarters between the given dates', () => {
|
|
6
|
-
const result = differenceInCalendarQuarters(
|
|
7
|
-
new Date(2012, 6 /* Jul */, 2, 18, 0),
|
|
8
|
-
new Date(2011, 6 /* Jul */, 2, 6, 0),
|
|
9
|
-
);
|
|
10
|
-
expect(result).toBe(4);
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
it('returns a negative number if the time value of the first date is smaller', () => {
|
|
14
|
-
const result = differenceInCalendarQuarters(
|
|
15
|
-
new Date(2011, 6 /* Jul */, 2, 6, 0),
|
|
16
|
-
new Date(2012, 6 /* Jul */, 2, 18, 0),
|
|
17
|
-
);
|
|
18
|
-
expect(result).toBe(-4);
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
it('accepts timestamps', () => {
|
|
22
|
-
const result = differenceInCalendarQuarters(
|
|
23
|
-
new Date(2014, 9 /* Oct */, 2).getTime(),
|
|
24
|
-
new Date(2010, 6 /* Jul */, 2).getTime(),
|
|
25
|
-
);
|
|
26
|
-
expect(result).toBe(17);
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
describe('edge cases', () => {
|
|
30
|
-
it('the difference is less than a quarter, but the given dates are in different calendar quarters', () => {
|
|
31
|
-
const result = differenceInCalendarQuarters(new Date(2014, 6 /* Jul */, 1), new Date(2014, 5 /* Jun */, 30));
|
|
32
|
-
expect(result).toBe(1);
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
it('the same for the swapped dates', () => {
|
|
36
|
-
const result = differenceInCalendarQuarters(new Date(2014, 5 /* Jun */, 30), new Date(2014, 6 /* Jul */, 1));
|
|
37
|
-
expect(result).toBe(-1);
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
it('the days of months of the given dates are the same', () => {
|
|
41
|
-
const result = differenceInCalendarQuarters(new Date(2014, 3 /* Apr */, 6), new Date(2014, 0 /* Jan */, 6));
|
|
42
|
-
expect(result).toBe(1);
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
it('the given dates are the same', () => {
|
|
46
|
-
const result = differenceInCalendarQuarters(
|
|
47
|
-
new Date(2014, 8 /* Sep */, 5, 0, 0),
|
|
48
|
-
new Date(2014, 8 /* Sep */, 5, 0, 0),
|
|
49
|
-
);
|
|
50
|
-
expect(result).toBe(0);
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
it('does not return -0 when the given dates are the same', () => {
|
|
54
|
-
function isNegativeZero(x: number): boolean {
|
|
55
|
-
return x === 0 && 1 / x < 0;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
const result = differenceInCalendarQuarters(
|
|
59
|
-
new Date(2014, 8 /* Sep */, 5, 0, 0),
|
|
60
|
-
new Date(2014, 8 /* Sep */, 5, 0, 0),
|
|
61
|
-
);
|
|
62
|
-
|
|
63
|
-
const resultIsNegative = isNegativeZero(result);
|
|
64
|
-
expect(resultIsNegative).toBe(false);
|
|
65
|
-
});
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
it('returns NaN if the first date is `Invalid Date`', () => {
|
|
69
|
-
const result = differenceInCalendarQuarters(new Date(NaN), new Date(2017, 0 /* Jan */, 1));
|
|
70
|
-
expect(isNaN(result)).toBe(true);
|
|
71
|
-
});
|
|
72
|
-
|
|
73
|
-
it('returns NaN if the second date is `Invalid Date`', () => {
|
|
74
|
-
const result = differenceInCalendarQuarters(new Date(2017, 0 /* Jan */, 1), new Date(NaN));
|
|
75
|
-
expect(isNaN(result)).toBe(true);
|
|
76
|
-
});
|
|
77
|
-
|
|
78
|
-
it('returns NaN if the both dates are `Invalid Date`', () => {
|
|
79
|
-
const result = differenceInCalendarQuarters(new Date(NaN), new Date(NaN));
|
|
80
|
-
expect(isNaN(result)).toBe(true);
|
|
81
|
-
});
|
|
82
|
-
});
|
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import { differenceInCalendarWeeks } from './index';
|
|
3
|
-
|
|
4
|
-
describe('differenceInCalendarWeeks', () => {
|
|
5
|
-
it('returns the number of calendar weeks between the given dates', () => {
|
|
6
|
-
const result = differenceInCalendarWeeks(
|
|
7
|
-
new Date(2014, 6 /* Jul */, 8, 18, 0),
|
|
8
|
-
new Date(2014, 5 /* Jun */, 29, 6, 0),
|
|
9
|
-
);
|
|
10
|
-
expect(result).toBe(1);
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
it('allows to specify which day is the first day of the week', () => {
|
|
14
|
-
const result = differenceInCalendarWeeks(
|
|
15
|
-
new Date(2014, 6 /* Jul */, 8, 18, 0),
|
|
16
|
-
new Date(2014, 5 /* Jun */, 29, 6, 0),
|
|
17
|
-
{ weekStartsOn: 1 },
|
|
18
|
-
);
|
|
19
|
-
expect(result).toBe(2);
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
it('allows to specify which day is the first day of the week in locale', () => {
|
|
23
|
-
const result = differenceInCalendarWeeks(
|
|
24
|
-
new Date(2014, 6 /* Jul */, 8, 18, 0),
|
|
25
|
-
new Date(2014, 5 /* Jun */, 29, 6, 0),
|
|
26
|
-
{
|
|
27
|
-
locale: {
|
|
28
|
-
options: { weekStartsOn: 1 },
|
|
29
|
-
},
|
|
30
|
-
},
|
|
31
|
-
);
|
|
32
|
-
expect(result).toBe(2);
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
it('`options.weekStartsOn` overwrites the first day of the week specified in locale', () => {
|
|
36
|
-
const result = differenceInCalendarWeeks(
|
|
37
|
-
new Date(2014, 6 /* Jul */, 8, 18, 0),
|
|
38
|
-
new Date(2014, 5 /* Jun */, 29, 6, 0),
|
|
39
|
-
{
|
|
40
|
-
weekStartsOn: 1,
|
|
41
|
-
locale: {
|
|
42
|
-
options: { weekStartsOn: 0 },
|
|
43
|
-
},
|
|
44
|
-
},
|
|
45
|
-
);
|
|
46
|
-
expect(result).toBe(2);
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
it('returns a positive number if the time value of the second date is smaller', () => {
|
|
50
|
-
const result = differenceInCalendarWeeks(
|
|
51
|
-
new Date(2014, 6 /* Jul */, 8, 18, 0),
|
|
52
|
-
new Date(2014, 5 /* Jun */, 29, 6, 0),
|
|
53
|
-
{
|
|
54
|
-
weekStartsOn: 1,
|
|
55
|
-
},
|
|
56
|
-
);
|
|
57
|
-
expect(result).toBe(2);
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
it('returns a negative number if the time value of the first date is smaller', () => {
|
|
61
|
-
const result = differenceInCalendarWeeks(
|
|
62
|
-
new Date(2014, 5 /* Jun */, 29, 6, 0),
|
|
63
|
-
new Date(2014, 6 /* Jul */, 8, 18, 0),
|
|
64
|
-
);
|
|
65
|
-
expect(result).toBe(-1);
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
it('accepts timestamps', () => {
|
|
69
|
-
const result = differenceInCalendarWeeks(
|
|
70
|
-
new Date(2014, 6 /* Jul */, 12).getTime(),
|
|
71
|
-
new Date(2014, 6 /* Jul */, 2).getTime(),
|
|
72
|
-
);
|
|
73
|
-
expect(result).toBe(1);
|
|
74
|
-
});
|
|
75
|
-
|
|
76
|
-
describe('edge cases', () => {
|
|
77
|
-
it('the difference is less than a week, but the given dates are in different calendar weeks', () => {
|
|
78
|
-
const result = differenceInCalendarWeeks(new Date(2014, 6 /* Jul */, 6), new Date(2014, 6 /* Jul */, 5));
|
|
79
|
-
expect(result).toBe(1);
|
|
80
|
-
});
|
|
81
|
-
|
|
82
|
-
it('the same for the swapped dates', () => {
|
|
83
|
-
const result = differenceInCalendarWeeks(new Date(2014, 6 /* Jul */, 5), new Date(2014, 6 /* Jul */, 6));
|
|
84
|
-
expect(result).toBe(-1);
|
|
85
|
-
});
|
|
86
|
-
|
|
87
|
-
it('the days of weeks of the given dates are the same', () => {
|
|
88
|
-
const result = differenceInCalendarWeeks(new Date(2014, 6 /* Jul */, 9), new Date(2014, 6 /* Jul */, 2));
|
|
89
|
-
expect(result).toBe(1);
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
it('the given dates are the same', () => {
|
|
93
|
-
const result = differenceInCalendarWeeks(
|
|
94
|
-
new Date(2014, 8 /* Sep */, 5, 0, 0),
|
|
95
|
-
new Date(2014, 8 /* Sep */, 5, 0, 0),
|
|
96
|
-
);
|
|
97
|
-
expect(result).toBe(0);
|
|
98
|
-
});
|
|
99
|
-
|
|
100
|
-
it('does not return -0 when the given dates are the same', () => {
|
|
101
|
-
function isNegativeZero(x: number): boolean {
|
|
102
|
-
return x === 0 && 1 / x < 0;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
const result = differenceInCalendarWeeks(
|
|
106
|
-
new Date(2014, 8 /* Sep */, 5, 0, 0),
|
|
107
|
-
new Date(2014, 8 /* Sep */, 5, 0, 0),
|
|
108
|
-
);
|
|
109
|
-
|
|
110
|
-
const resultIsNegative = isNegativeZero(result);
|
|
111
|
-
expect(resultIsNegative).toBe(false);
|
|
112
|
-
});
|
|
113
|
-
|
|
114
|
-
it('properly works with negative numbers', () => {
|
|
115
|
-
const a = new Date(2014, 6 /* Jul */, 9);
|
|
116
|
-
const b = new Date(2014, 6 /* Jul */, 19);
|
|
117
|
-
expect(differenceInCalendarWeeks(b, a)).toBe(1);
|
|
118
|
-
expect(differenceInCalendarWeeks(a, b)).toBe(-1);
|
|
119
|
-
});
|
|
120
|
-
});
|
|
121
|
-
|
|
122
|
-
it('returns NaN if the first date is `Invalid Date`', () => {
|
|
123
|
-
const result = differenceInCalendarWeeks(new Date(NaN), new Date(2017, 0 /* Jan */, 1));
|
|
124
|
-
expect(isNaN(result)).toBe(true);
|
|
125
|
-
});
|
|
126
|
-
|
|
127
|
-
it('returns NaN if the second date is `Invalid Date`', () => {
|
|
128
|
-
const result = differenceInCalendarWeeks(new Date(2017, 0 /* Jan */, 1), new Date(NaN));
|
|
129
|
-
expect(isNaN(result)).toBe(true);
|
|
130
|
-
});
|
|
131
|
-
|
|
132
|
-
it('returns NaN if the both dates are `Invalid Date`', () => {
|
|
133
|
-
const result = differenceInCalendarWeeks(new Date(NaN), new Date(NaN));
|
|
134
|
-
expect(isNaN(result)).toBe(true);
|
|
135
|
-
});
|
|
136
|
-
});
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import { differenceInCalendarYears } from './index';
|
|
3
|
-
|
|
4
|
-
describe('differenceInCalendarYears', () => {
|
|
5
|
-
it('returns the number of calendar years between the given dates', () => {
|
|
6
|
-
const result = differenceInCalendarYears(
|
|
7
|
-
new Date(2012, 6 /* Jul */, 2, 18, 0),
|
|
8
|
-
new Date(2011, 6 /* Jul */, 2, 6, 0),
|
|
9
|
-
);
|
|
10
|
-
expect(result).toBe(1);
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
it('returns a negative number if the time value of the first date is smaller', () => {
|
|
14
|
-
const result = differenceInCalendarYears(
|
|
15
|
-
new Date(2011, 6 /* Jul */, 2, 6, 0),
|
|
16
|
-
new Date(2012, 6 /* Jul */, 2, 18, 0),
|
|
17
|
-
);
|
|
18
|
-
expect(result).toBe(-1);
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
it('accepts timestamps', () => {
|
|
22
|
-
const result = differenceInCalendarYears(
|
|
23
|
-
new Date(2014, 6 /* Jul */, 2).getTime(),
|
|
24
|
-
new Date(2010, 6 /* Jul */, 2).getTime(),
|
|
25
|
-
);
|
|
26
|
-
expect(result).toBe(4);
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
describe('edge cases', () => {
|
|
30
|
-
it('the difference is less than a year, but the given dates are in different calendar years', () => {
|
|
31
|
-
const result = differenceInCalendarYears(new Date(2015, 0 /* Jan */, 1), new Date(2014, 11 /* Dec */, 31));
|
|
32
|
-
expect(result).toBe(1);
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
it('the same for the swapped dates', () => {
|
|
36
|
-
const result = differenceInCalendarYears(new Date(2014, 11 /* Dec */, 31), new Date(2015, 0 /* Jan */, 1));
|
|
37
|
-
expect(result).toBe(-1);
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
it('the days and months of the given dates are the same', () => {
|
|
41
|
-
const result = differenceInCalendarYears(new Date(2014, 8 /* Sep */, 5), new Date(2012, 8 /* Sep */, 5));
|
|
42
|
-
expect(result).toBe(2);
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
it('the given dates are the same', () => {
|
|
46
|
-
const result = differenceInCalendarYears(
|
|
47
|
-
new Date(2014, 8 /* Sep */, 5, 0, 0),
|
|
48
|
-
new Date(2014, 8 /* Sep */, 5, 0, 0),
|
|
49
|
-
);
|
|
50
|
-
expect(result).toBe(0);
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
it('does not return -0 when the given dates are the same', () => {
|
|
54
|
-
function isNegativeZero(x: number): boolean {
|
|
55
|
-
return x === 0 && 1 / x < 0;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
const result = differenceInCalendarYears(
|
|
59
|
-
new Date(2014, 8 /* Sep */, 5, 0, 0),
|
|
60
|
-
new Date(2014, 8 /* Sep */, 5, 0, 0),
|
|
61
|
-
);
|
|
62
|
-
|
|
63
|
-
const resultIsNegative = isNegativeZero(result);
|
|
64
|
-
expect(resultIsNegative).toBe(false);
|
|
65
|
-
});
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
it('returns NaN if the first date is `Invalid Date`', () => {
|
|
69
|
-
const result = differenceInCalendarYears(new Date(NaN), new Date(2017, 0 /* Jan */, 1));
|
|
70
|
-
expect(isNaN(result)).toBe(true);
|
|
71
|
-
});
|
|
72
|
-
|
|
73
|
-
it('returns NaN if the second date is `Invalid Date`', () => {
|
|
74
|
-
const result = differenceInCalendarYears(new Date(2017, 0 /* Jan */, 1), new Date(NaN));
|
|
75
|
-
expect(isNaN(result)).toBe(true);
|
|
76
|
-
});
|
|
77
|
-
|
|
78
|
-
it('returns NaN if the both dates are `Invalid Date`', () => {
|
|
79
|
-
const result = differenceInCalendarYears(new Date(NaN), new Date(NaN));
|
|
80
|
-
expect(isNaN(result)).toBe(true);
|
|
81
|
-
});
|
|
82
|
-
});
|
|
@@ -1,175 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import { differenceInDays } from './index';
|
|
3
|
-
import { getDstTransitions } from '../_test/dst/tzOffsetTransitions';
|
|
4
|
-
|
|
5
|
-
describe('differenceInDays', () => {
|
|
6
|
-
it('returns the number of full days between the given dates', () => {
|
|
7
|
-
const result = differenceInDays(new Date(2012, 6 /* Jul */, 2, 18, 0), new Date(2011, 6 /* Jul */, 2, 6, 0));
|
|
8
|
-
expect(result).toBe(366);
|
|
9
|
-
});
|
|
10
|
-
|
|
11
|
-
it('returns a negative number if the time value of the first date is smaller', () => {
|
|
12
|
-
const result = differenceInDays(new Date(2011, 6 /* Jul */, 2, 6, 0), new Date(2012, 6 /* Jul */, 2, 18, 0));
|
|
13
|
-
expect(result).toBe(-366);
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
it('accepts timestamps', () => {
|
|
17
|
-
const result = differenceInDays(
|
|
18
|
-
new Date(2014, 8 /* Sep */, 5, 18, 0).getTime(),
|
|
19
|
-
new Date(2014, 8 /* Sep */, 4, 6, 0).getTime(),
|
|
20
|
-
);
|
|
21
|
-
expect(result).toBe(1);
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
describe('edge cases', () => {
|
|
25
|
-
it('the difference is less than a day, but the given dates are in different calendar days', () => {
|
|
26
|
-
const result = differenceInDays(new Date(2014, 8 /* Sep */, 5, 0, 0), new Date(2014, 8 /* Sep */, 4, 23, 59));
|
|
27
|
-
expect(result).toBe(0);
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
it('the same for the swapped dates', () => {
|
|
31
|
-
const result = differenceInDays(new Date(2014, 8 /* Sep */, 4, 23, 59), new Date(2014, 8 /* Sep */, 5, 0, 0));
|
|
32
|
-
expect(result).toBe(0);
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
it('the time values of the given dates are the same', () => {
|
|
36
|
-
const result = differenceInDays(new Date(2014, 8 /* Sep */, 6, 0, 0), new Date(2014, 8 /* Sep */, 5, 0, 0));
|
|
37
|
-
expect(result).toBe(1);
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
it('the given dates are the same', () => {
|
|
41
|
-
const result = differenceInDays(new Date(2014, 8 /* Sep */, 5, 0, 0), new Date(2014, 8 /* Sep */, 5, 0, 0));
|
|
42
|
-
expect(result).toBe(0);
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
const dstTransitions = getDstTransitions(2017);
|
|
46
|
-
const dstOnly = dstTransitions.start && dstTransitions.end ? it : it.skip;
|
|
47
|
-
const tz = Intl.DateTimeFormat().resolvedOptions().timeZone || process.env.tz;
|
|
48
|
-
dstOnly(`works across DST start & end in local timezone: ${tz || '(unknown)'}`, () => {
|
|
49
|
-
const { start, end } = dstTransitions;
|
|
50
|
-
const HOUR = 1000 * 60 * 60;
|
|
51
|
-
const MINUTE = 1000 * 60;
|
|
52
|
-
function sameTime(t1: Date, t2: Date): boolean {
|
|
53
|
-
return (
|
|
54
|
-
t1.getHours() === t2.getHours() &&
|
|
55
|
-
t1.getMinutes() === t2.getMinutes() &&
|
|
56
|
-
t1.getSeconds() === t2.getSeconds() &&
|
|
57
|
-
t1.getMilliseconds() === t2.getMilliseconds()
|
|
58
|
-
);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
expect(start).not.toBe(undefined);
|
|
62
|
-
expect(end).not.toBe(undefined);
|
|
63
|
-
|
|
64
|
-
if (start === undefined || end === undefined) {
|
|
65
|
-
return;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
// It's usually 1 hour, but for some timezones, e.g. Australia/Lord_Howe, it is 30 minutes
|
|
69
|
-
const dstOffset = (end.getTimezoneOffset() - start.getTimezoneOffset()) * MINUTE;
|
|
70
|
-
|
|
71
|
-
// TEST DST START (SPRING)
|
|
72
|
-
|
|
73
|
-
// anchor to one hour before the boundary
|
|
74
|
-
{
|
|
75
|
-
const a = new Date(start.getTime() - HOUR); // 1 hour before DST
|
|
76
|
-
const b = new Date(a.getTime() + 24 * HOUR - dstOffset); // 1 day later, same local time
|
|
77
|
-
const c = new Date(a.getTime() + 48 * HOUR - dstOffset); // 2 days later, same local time
|
|
78
|
-
|
|
79
|
-
expect(sameTime(a, b)).toBe(true);
|
|
80
|
-
expect(sameTime(a, c)).toBe(true);
|
|
81
|
-
expect(sameTime(b, c)).toBe(true);
|
|
82
|
-
expect(differenceInDays(c, b)).toBe(1); // normal 24-hour day
|
|
83
|
-
expect(differenceInDays(b, a)).toBe(1); // 23 hours -> 1 day
|
|
84
|
-
expect(differenceInDays(c, a)).toBe(2); // 47 hours -> 2 days
|
|
85
|
-
}
|
|
86
|
-
// anchor exactly, the boundary
|
|
87
|
-
{
|
|
88
|
-
const a = start; // exactly when DST starts
|
|
89
|
-
const b = new Date(a.getTime() + 24 * HOUR); // 1 day later, same local time
|
|
90
|
-
const c = new Date(a.getTime() + 48 * HOUR); // 2 days later, same local time
|
|
91
|
-
|
|
92
|
-
expect(sameTime(a, b)).toBe(true);
|
|
93
|
-
expect(sameTime(a, c)).toBe(true);
|
|
94
|
-
expect(sameTime(b, c)).toBe(true);
|
|
95
|
-
expect(differenceInDays(c, b)).toBe(1); // normal 24-hour day
|
|
96
|
-
expect(differenceInDays(b, a)).toBe(1); // normal 24-hour day
|
|
97
|
-
expect(differenceInDays(c, a)).toBe(2); // 2 normal 24-hour days
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
// TEST DST END (FALL)
|
|
101
|
-
|
|
102
|
-
// make sure that diffs across a "fall back" DST boundary won't report a full day
|
|
103
|
-
// until 25 hours have elapsed.
|
|
104
|
-
{
|
|
105
|
-
const a = new Date(end.getTime() - HOUR / 2); // 1 hour before Standard Time starts
|
|
106
|
-
const b = new Date(a.getTime() + 24 * HOUR + dstOffset - 15 * MINUTE); // 1 day later, 15 mins earlier local time
|
|
107
|
-
const c = new Date(a.getTime() + 48 * HOUR + dstOffset - 15 * MINUTE); // 2 days later, 15 mins earlier local time
|
|
108
|
-
|
|
109
|
-
expect(differenceInDays(c, b)).toBe(1); // normal 24-hour day
|
|
110
|
-
expect(differenceInDays(b, a)).toBe(0); // 24.75 hours -> 0 full days (because hour lost to DST)
|
|
111
|
-
expect(differenceInDays(c, a)).toBe(1); // 48.75 hours -> 1 full day (because hour lost to DST)
|
|
112
|
-
}
|
|
113
|
-
// anchor to one hour before the boundary
|
|
114
|
-
{
|
|
115
|
-
const a = new Date(end.getTime() - HOUR); // 1 hour before Standard Time start
|
|
116
|
-
const b = new Date(a.getTime() + 24 * HOUR + dstOffset); // 1 day later, same local time
|
|
117
|
-
const c = new Date(a.getTime() + 48 * HOUR + dstOffset); // 2 days later, same local time
|
|
118
|
-
|
|
119
|
-
expect(sameTime(a, b)).toBe(true);
|
|
120
|
-
expect(sameTime(a, c)).toBe(true);
|
|
121
|
-
expect(sameTime(b, c)).toBe(true);
|
|
122
|
-
expect(differenceInDays(c, b)).toBe(1); // normal 24-hour day
|
|
123
|
-
expect(differenceInDays(b, a)).toBe(1); // 25 hours -> 1 day
|
|
124
|
-
expect(differenceInDays(c, a)).toBe(2); // 49 hours -> 2 days
|
|
125
|
-
}
|
|
126
|
-
// anchor to one hour after the boundary
|
|
127
|
-
{
|
|
128
|
-
const a = new Date(end.getTime() + HOUR); // 1 hour after Standard Time start
|
|
129
|
-
const b = new Date(a.getTime() + 24 * HOUR); // 1 day later, same local time
|
|
130
|
-
const c = new Date(a.getTime() + 48 * HOUR); // 2 days later, same local time
|
|
131
|
-
|
|
132
|
-
expect(sameTime(a, b)).toBe(true);
|
|
133
|
-
expect(sameTime(a, c)).toBe(true);
|
|
134
|
-
expect(sameTime(b, c)).toBe(true);
|
|
135
|
-
expect(differenceInDays(c, b)).toBe(1); // normal 24-hour day
|
|
136
|
-
expect(differenceInDays(b, a)).toBe(1); // normal 24-hour day
|
|
137
|
-
expect(differenceInDays(c, a)).toBe(2); // 2 normal 24-hour days
|
|
138
|
-
}
|
|
139
|
-
// anchor exactly at the boundary
|
|
140
|
-
{
|
|
141
|
-
const a = end; // exactly when Standard Time starts
|
|
142
|
-
const b = new Date(a.getTime() + 24 * HOUR); // 1 day later, same local time
|
|
143
|
-
const c = new Date(a.getTime() + 48 * HOUR); // 2 days later, same local time
|
|
144
|
-
expect(differenceInDays(b, a)).toBe(1); // normal 24-hour day
|
|
145
|
-
expect(differenceInDays(c, a)).toBe(2); // 2 normal 24-hour days
|
|
146
|
-
}
|
|
147
|
-
});
|
|
148
|
-
|
|
149
|
-
it('does not return -0 when the given dates are the same', () => {
|
|
150
|
-
function isNegativeZero(x: number): boolean {
|
|
151
|
-
return x === 0 && 1 / x < 0;
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
const result = differenceInDays(new Date(2014, 8 /* Sep */, 5, 0, 0), new Date(2014, 8 /* Sep */, 5, 0, 0));
|
|
155
|
-
|
|
156
|
-
const resultIsNegative = isNegativeZero(result);
|
|
157
|
-
expect(resultIsNegative).toBe(false);
|
|
158
|
-
});
|
|
159
|
-
});
|
|
160
|
-
|
|
161
|
-
it('returns NaN if the first date is `Invalid Date`', () => {
|
|
162
|
-
const result = differenceInDays(new Date(NaN), new Date(2017, 0 /* Jan */, 1));
|
|
163
|
-
expect(isNaN(result)).toBe(true);
|
|
164
|
-
});
|
|
165
|
-
|
|
166
|
-
it('returns NaN if the second date is `Invalid Date`', () => {
|
|
167
|
-
const result = differenceInDays(new Date(2017, 0 /* Jan */, 1), new Date(NaN));
|
|
168
|
-
expect(isNaN(result)).toBe(true);
|
|
169
|
-
});
|
|
170
|
-
|
|
171
|
-
it('returns NaN if the both dates are `Invalid Date`', () => {
|
|
172
|
-
const result = differenceInDays(new Date(NaN), new Date(NaN));
|
|
173
|
-
expect(isNaN(result)).toBe(true);
|
|
174
|
-
});
|
|
175
|
-
});
|
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import { differenceInHours } from './index';
|
|
3
|
-
|
|
4
|
-
describe('differenceInHours', () => {
|
|
5
|
-
it('returns the number of hours between the given dates with `trunc` as a default rounding method', () => {
|
|
6
|
-
const result = differenceInHours(
|
|
7
|
-
new Date(2014, 6 /* Jul */, 2, 6, 0, 29),
|
|
8
|
-
new Date(2014, 6 /* Jul */, 2, 20, 0, 28.973),
|
|
9
|
-
);
|
|
10
|
-
expect(result).toBe(-13);
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
it('returns the number of hours between the given dates', () => {
|
|
14
|
-
const result = differenceInHours(new Date(2014, 6 /* Jul */, 2, 20, 0), new Date(2014, 6 /* Jul */, 2, 6, 0));
|
|
15
|
-
expect(result).toBe(14);
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
it('returns a negative number if the time value of the first date is smaller', () => {
|
|
19
|
-
const result = differenceInHours(new Date(2014, 6 /* Jul */, 2, 6, 0), new Date(2014, 6 /* Jul */, 2, 20, 0));
|
|
20
|
-
expect(result).toBe(-14);
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
it('returns a 0, not a negative 0 - issue #2555 ', () => {
|
|
24
|
-
const result = differenceInHours(
|
|
25
|
-
new Date(2021, 6 /* Jul */, 22, 6, 1, 28.973),
|
|
26
|
-
new Date(2021, 6 /* Jul */, 22, 6, 1, 28.976),
|
|
27
|
-
);
|
|
28
|
-
expect(result).toBe(0);
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
it('returns 2 with a rounding method of `ceil`, not a negative 0 - issue #2555 ', () => {
|
|
32
|
-
const result = differenceInHours(
|
|
33
|
-
new Date(2021, 6 /* Jul */, 22, 7, 1, 29, 976),
|
|
34
|
-
new Date(2021, 6 /* Jul */, 22, 6, 1, 28, 173),
|
|
35
|
-
{ roundingMethod: 'ceil' },
|
|
36
|
-
);
|
|
37
|
-
expect(result).toBe(2);
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
it('returns 1 with a rounding method of `floor`, not a negative 0 - issue #2555 ', () => {
|
|
41
|
-
const result = differenceInHours(
|
|
42
|
-
new Date(2021, 6 /* Jul */, 22, 7, 1, 29, 976),
|
|
43
|
-
new Date(2021, 6 /* Jul */, 22, 6, 1, 28, 173),
|
|
44
|
-
{ roundingMethod: 'floor' },
|
|
45
|
-
);
|
|
46
|
-
expect(result).toBe(1);
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
it('returns 1 with a rounding method of `round`, not a negative 0 - issue #2555 ', () => {
|
|
50
|
-
const result = differenceInHours(
|
|
51
|
-
new Date(2021, 6 /* Jul */, 22, 7, 1, 29, 976),
|
|
52
|
-
new Date(2021, 6 /* Jul */, 22, 6, 1, 28, 173),
|
|
53
|
-
{ roundingMethod: 'round' },
|
|
54
|
-
);
|
|
55
|
-
expect(result).toBe(1);
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
it('returns 1 with a rounding method of `trunc`, not a negative 0 - issue #2555 ', () => {
|
|
59
|
-
const result = differenceInHours(
|
|
60
|
-
new Date(2021, 6 /* Jul */, 22, 7, 1, 29, 976),
|
|
61
|
-
new Date(2021, 6 /* Jul */, 22, 6, 1, 28, 173),
|
|
62
|
-
{ roundingMethod: 'trunc' },
|
|
63
|
-
);
|
|
64
|
-
expect(result).toBe(1);
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
it('accepts timestamps', () => {
|
|
68
|
-
const result = differenceInHours(
|
|
69
|
-
new Date(2014, 8 /* Sep */, 5, 18, 0).getTime(),
|
|
70
|
-
new Date(2014, 8 /* Sep */, 5, 6, 0).getTime(),
|
|
71
|
-
);
|
|
72
|
-
expect(result).toBe(12);
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
describe('edge cases', () => {
|
|
76
|
-
it('the difference is less than an hour, but the given dates are in different calendar hours', () => {
|
|
77
|
-
const result = differenceInHours(new Date(2014, 8 /* Sep */, 5, 12), new Date(2014, 8 /* Sep */, 5, 11, 59));
|
|
78
|
-
expect(result).toBe(0);
|
|
79
|
-
});
|
|
80
|
-
|
|
81
|
-
it('the same for the swapped dates', () => {
|
|
82
|
-
const result = differenceInHours(new Date(2014, 8 /* Sep */, 5, 11, 59), new Date(2014, 8 /* Sep */, 5, 12));
|
|
83
|
-
expect(result).toBe(0);
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
it('the difference is an integral number of hours', () => {
|
|
87
|
-
const result = differenceInHours(new Date(2014, 8 /* Sep */, 5, 13, 0), new Date(2014, 8 /* Sep */, 5, 12, 0));
|
|
88
|
-
expect(result).toBe(1);
|
|
89
|
-
});
|
|
90
|
-
|
|
91
|
-
it('the given dates are the same', () => {
|
|
92
|
-
const result = differenceInHours(new Date(2014, 8 /* Sep */, 5, 0, 0), new Date(2014, 8 /* Sep */, 5, 0, 0));
|
|
93
|
-
expect(result).toBe(0);
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
it('does not return -0 when the given dates are the same', () => {
|
|
97
|
-
function isNegativeZero(x: number): boolean {
|
|
98
|
-
return x === 0 && 1 / x < 0;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
const result = differenceInHours(new Date(2014, 8 /* Sep */, 5, 0, 0), new Date(2014, 8 /* Sep */, 5, 0, 0));
|
|
102
|
-
|
|
103
|
-
const resultIsNegative = isNegativeZero(result);
|
|
104
|
-
expect(resultIsNegative).toBe(false);
|
|
105
|
-
});
|
|
106
|
-
});
|
|
107
|
-
|
|
108
|
-
it('returns NaN if the first date is `Invalid Date`', () => {
|
|
109
|
-
const result = differenceInHours(new Date(NaN), new Date(2017, 0 /* Jan */, 1));
|
|
110
|
-
expect(isNaN(result)).toBe(true);
|
|
111
|
-
});
|
|
112
|
-
|
|
113
|
-
it('returns NaN if the second date is `Invalid Date`', () => {
|
|
114
|
-
const result = differenceInHours(new Date(2017, 0 /* Jan */, 1), new Date(NaN));
|
|
115
|
-
expect(isNaN(result)).toBe(true);
|
|
116
|
-
});
|
|
117
|
-
|
|
118
|
-
it('returns NaN if the both dates are `Invalid Date`', () => {
|
|
119
|
-
const result = differenceInHours(new Date(NaN), new Date(NaN));
|
|
120
|
-
expect(isNaN(result)).toBe(true);
|
|
121
|
-
});
|
|
122
|
-
});
|