1
1
import type Locale from "@ui5/webcomponents-base/dist/locale/Locale.js" ;
2
+ import CalendarType from "@ui5/webcomponents-base/dist/types/CalendarType.js" ;
2
3
import UniversalDate from "./UniversalDate.js" ;
3
4
import type LocaleData from "../LocaleData.js" ;
4
5
import type UI5Date from "./UI5Date.js" ;
5
6
6
- const calculateWeekNumber = ( confFirstDayOfWeek : number | undefined , oDate : Date | UI5Date , iYear : number , oLocale : Locale , oLocaleData : LocaleData ) => {
7
+ const calculateWeekNumber = ( confFirstDayOfWeek : number | undefined , oDate : Date | UI5Date , iYear : number , oLocale : Locale , oLocaleData : LocaleData , calendarType : CalendarType ) => {
7
8
let iWeekNum = 0 ;
8
9
let iWeekDay = 0 ;
9
10
const iFirstDayOfWeek = Number . isInteger ( confFirstDayOfWeek ) ? confFirstDayOfWeek ! : oLocaleData . getFirstDayOfWeek ( ) ;
@@ -17,32 +18,32 @@ const calculateWeekNumber = (confFirstDayOfWeek: number | undefined, oDate: Date
17
18
* The first week of the year starts with January 1st. But Dec. 31 is still in the last year
18
19
* So the week beginning in December and ending in January has 2 week numbers
19
20
*/
20
- const oJanFirst = new UniversalDate ( oDate . getTime ( ) ) ;
21
+ const oJanFirst = UniversalDate . getInstance ( oDate , calendarType ) ;
21
22
oJanFirst . setUTCFullYear ( iYear , 0 , 1 ) ;
22
23
iWeekDay = oJanFirst . getUTCDay ( ) ;
23
24
24
25
// get the date for the same weekday like jan 1.
25
- const oCheckDate = new UniversalDate ( oDate . getTime ( ) ) ;
26
+ const oCheckDate = UniversalDate . getInstance ( oDate , calendarType ) ;
26
27
oCheckDate . setUTCDate ( oCheckDate . getUTCDate ( ) - oCheckDate . getUTCDay ( ) + iWeekDay ) ;
27
28
28
29
iWeekNum = Math . round ( ( oCheckDate . getTime ( ) - oJanFirst . getTime ( ) ) / 86400000 / 7 ) + 1 ;
29
30
} else {
30
31
// normally the first week of the year is the one where the first Thursday of the year is
31
32
// find Thursday of this week
32
33
// if the checked day is before the 1. day of the week use a day of the previous week to check
33
- const oThursday = new UniversalDate ( oDate . getTime ( ) ) ;
34
+ const oThursday = UniversalDate . getInstance ( oDate , calendarType ) ;
34
35
oThursday . setUTCDate ( oThursday . getUTCDate ( ) - iFirstDayOfWeek ) ;
35
36
iWeekDay = oThursday . getUTCDay ( ) ;
36
37
oThursday . setUTCDate ( oThursday . getUTCDate ( ) - iWeekDay + 4 ) ;
37
38
38
- const oFirstDayOfYear = new UniversalDate ( oThursday . getTime ( ) ) ;
39
+ const oFirstDayOfYear = UniversalDate . getInstance ( new Date ( oThursday . getTime ( ) ) , calendarType ) ;
39
40
oFirstDayOfYear . setUTCMonth ( 0 , 1 ) ;
40
41
iWeekDay = oFirstDayOfYear . getUTCDay ( ) ;
41
42
let iAddDays = 0 ;
42
43
if ( iWeekDay > 4 ) {
43
44
iAddDays = 7 ; // first day of year is after Thursday, so first Thursday is in the next week
44
45
}
45
- const oFirstThursday = new UniversalDate ( oFirstDayOfYear . getTime ( ) ) ;
46
+ const oFirstThursday = UniversalDate . getInstance ( new Date ( oFirstDayOfYear . getTime ( ) ) , calendarType ) ;
46
47
oFirstThursday . setUTCDate ( 1 - iWeekDay + 4 + iAddDays ) ;
47
48
48
49
iWeekNum = Math . round ( ( oThursday . getTime ( ) - oFirstThursday . getTime ( ) ) / 86400000 / 7 ) + 1 ;
0 commit comments