getWeekOfMonth.cjs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. "use strict";
  2. exports.getWeekOfMonth = getWeekOfMonth;
  3. var _index = require("./_lib/defaultOptions.cjs");
  4. var _index2 = require("./getDate.cjs");
  5. var _index3 = require("./getDay.cjs");
  6. var _index4 = require("./startOfMonth.cjs");
  7. var _index5 = require("./toDate.cjs");
  8. /**
  9. * The {@link getWeekOfMonth} function options.
  10. */
  11. /**
  12. * @name getWeekOfMonth
  13. * @category Week Helpers
  14. * @summary Get the week of the month of the given date.
  15. *
  16. * @description
  17. * Get the week of the month of the given date.
  18. *
  19. * @param date - The given date
  20. * @param options - An object with options.
  21. *
  22. * @returns The week of month
  23. *
  24. * @example
  25. * // Which week of the month is 9 November 2017?
  26. * const result = getWeekOfMonth(new Date(2017, 10, 9))
  27. * //=> 2
  28. */
  29. function getWeekOfMonth(date, options) {
  30. const defaultOptions = (0, _index.getDefaultOptions)();
  31. const weekStartsOn =
  32. options?.weekStartsOn ??
  33. options?.locale?.options?.weekStartsOn ??
  34. defaultOptions.weekStartsOn ??
  35. defaultOptions.locale?.options?.weekStartsOn ??
  36. 0;
  37. const currentDayOfMonth = (0, _index2.getDate)(
  38. (0, _index5.toDate)(date, options?.in),
  39. );
  40. if (isNaN(currentDayOfMonth)) return NaN;
  41. const startWeekDay = (0, _index3.getDay)(
  42. (0, _index4.startOfMonth)(date, options),
  43. );
  44. let lastDayOfFirstWeek = weekStartsOn - startWeekDay;
  45. if (lastDayOfFirstWeek <= 0) lastDayOfFirstWeek += 7;
  46. const remainingDaysAfterFirstWeek = currentDayOfMonth - lastDayOfFirstWeek;
  47. return Math.ceil(remainingDaysAfterFirstWeek / 7) + 1;
  48. }