1
1
import dayjs from 'dayjs' ;
2
+ import utc from 'dayjs/plugin/utc.js' ;
2
3
import { getCurrentLocale } from '../utils.js' ;
3
4
4
- // Returns an array of millisecond-timestamps of start-of-week days (Sundays)
5
+ dayjs . extend ( utc ) ;
6
+
7
+ /**
8
+ * Returns an array of millisecond-timestamps of start-of-week days (Sundays)
9
+ *
10
+ * @param startConfig The start date. Can take any type that `Date` accepts.
11
+ * @param endConfig The end date. Can take any type that `Date` accepts.
12
+ */
5
13
export function startDaysBetween ( startDate , endDate ) {
14
+ const start = dayjs . utc ( startDate ) ;
15
+ const end = dayjs . utc ( endDate ) ;
16
+
17
+ let current = start ;
18
+
6
19
// Ensure the start date is a Sunday
7
- while ( startDate . getDay ( ) !== 0 ) {
8
- startDate . setDate ( startDate . getDate ( ) + 1 ) ;
20
+ while ( current . day ( ) !== 0 ) {
21
+ current = current . add ( 1 , 'day' ) ;
9
22
}
10
23
11
- const start = dayjs ( startDate ) ;
12
- const end = dayjs ( endDate ) ;
13
24
const startDays = [ ] ;
14
-
15
- let current = start ;
16
25
while ( current . isBefore ( end ) ) {
17
26
startDays . push ( current . valueOf ( ) ) ;
18
- // we are adding 7 * 24 hours instead of 1 week because we don't want
19
- // date library to use local time zone to calculate 1 week from now.
20
- // local time zone is problematic because of daylight saving time (dst)
21
- // used on some countries
22
- current = current . add ( 7 * 24 , 'hour' ) ;
27
+ current = current . add ( 1 , 'week' ) ;
23
28
}
24
29
25
30
return startDays ;
@@ -29,10 +34,10 @@ export function firstStartDateAfterDate(inputDate) {
29
34
if ( ! ( inputDate instanceof Date ) ) {
30
35
throw new Error ( 'Invalid date' ) ;
31
36
}
32
- const dayOfWeek = inputDate . getDay ( ) ;
37
+ const dayOfWeek = inputDate . getUTCDay ( ) ;
33
38
const daysUntilSunday = 7 - dayOfWeek ;
34
39
const resultDate = new Date ( inputDate . getTime ( ) ) ;
35
- resultDate . setDate ( resultDate . getDate ( ) + daysUntilSunday ) ;
40
+ resultDate . setUTCDate ( resultDate . getUTCDate ( ) + daysUntilSunday ) ;
36
41
return resultDate . valueOf ( ) ;
37
42
}
38
43
0 commit comments