import getDate from '../getDate/index' ; import getDay from '../getDay/index' ; import startOfMonth from '../startOfMonth/index' ; import type { LocaleOptions , WeekStartOptions } from '../types' ; import requiredArgs from '../_lib/requiredArgs/index' ; import toInteger from '../_lib/toInteger/index' ; name category summary description param { Date | Number } date param options param { Locale } options . locale - the locale object. See [Locale] https param { 0 | 1 | 2 | 3 | 4 | 5 | 6 } options . weekStartsOn returns { Number } throws throws example export default function getWeekOfMonth ( date , options ? ) { requiredArgs ( 1 , arguments ) ; const defaultWeekStartsOn = options ?. locale ?. options ?. weekStartsOn || 0 ; const weekStartsOn = options ?. weekStartsOn == null ? toInteger ( defaultWeekStartsOn ) : toInteger ( options . weekStartsOn ) ; if ( ! ( weekStartsOn >= 0 && weekStartsOn <= 6 ) ) { throw new RangeError ( 'weekStartsOn must be between 0 and 6 inclusively' ) ; } const currentDayOfMonth = getDate ( date ) ; if ( isNaN ( currentDayOfMonth ) ) return NaN ; const startWeekDay = getDay ( startOfMonth ( date ) ) ; let lastDayOfFirstWeek = weekStartsOn - startWeekDay ; if ( lastDayOfFirstWeek <= 0 ) lastDayOfFirstWeek += 7 ; const remainingDaysAfterFirstWeek = currentDayOfMonth - lastDayOfFirstWeek ; return Math . ceil ( remainingDaysAfterFirstWeek / 7 ) + 1 ; }