(
date: DateArg<Date> & {},
options?: GetWeekOfMonthOptions,
)
| 35 | * //=> 2 |
| 36 | */ |
| 37 | export function getWeekOfMonth( |
| 38 | date: DateArg<Date> & {}, |
| 39 | options?: GetWeekOfMonthOptions, |
| 40 | ): number { |
| 41 | const defaultOptions = getDefaultOptions(); |
| 42 | const weekStartsOn = |
| 43 | options?.weekStartsOn ?? |
| 44 | options?.locale?.options?.weekStartsOn ?? |
| 45 | defaultOptions.weekStartsOn ?? |
| 46 | defaultOptions.locale?.options?.weekStartsOn ?? |
| 47 | 0; |
| 48 | |
| 49 | const currentDayOfMonth = getDate(toDate(date, options?.in)); |
| 50 | if (isNaN(currentDayOfMonth)) return NaN; |
| 51 | |
| 52 | const startWeekDay = getDay(startOfMonth(date, options)); |
| 53 | |
| 54 | let lastDayOfFirstWeek = weekStartsOn - startWeekDay; |
| 55 | if (lastDayOfFirstWeek <= 0) lastDayOfFirstWeek += 7; |
| 56 | |
| 57 | const remainingDaysAfterFirstWeek = currentDayOfMonth - lastDayOfFirstWeek; |
| 58 | return Math.ceil(remainingDaysAfterFirstWeek / 7) + 1; |
| 59 | } |
no test coverage detected