index.js 1.8 KB

1234567891011121314151617181920212223
  1. import toDate from "../../toDate/index.js";
  2. import requiredArgs from "../requiredArgs/index.js";
  3. import toInteger from "../toInteger/index.js";
  4. import { getDefaultOptions } from "../defaultOptions/index.js";
  5. export default function setUTCDay(dirtyDate, dirtyDay, options) {
  6. var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;
  7. requiredArgs(2, arguments);
  8. var defaultOptions = getDefaultOptions();
  9. var weekStartsOn = toInteger((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0);
  10. // Test if weekStartsOn is between 0 and 6 _and_ is not NaN
  11. if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {
  12. throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');
  13. }
  14. var date = toDate(dirtyDate);
  15. var day = toInteger(dirtyDay);
  16. var currentDay = date.getUTCDay();
  17. var remainder = day % 7;
  18. var dayIndex = (remainder + 7) % 7;
  19. var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay;
  20. date.setUTCDate(date.getUTCDate() + diff);
  21. return date;
  22. }