12345678910111213141516171819202122232425262728293031323334353637383940 |
- var parse = require('../parse/index.js')
- var addDays = require('../add_days/index.js')
- /**
- * @category Weekday Helpers
- * @summary Set the day of the week to the given date.
- *
- * @description
- * Set the day of the week to the given date.
- *
- * @param {Date|String|Number} date - the date to be changed
- * @param {Number} day - the day of the week of the new date
- * @param {Object} [options] - the object with options
- * @param {Number} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)
- * @returns {Date} the new date with the day of the week setted
- *
- * @example
- * // Set Sunday to 1 September 2014:
- * var result = setDay(new Date(2014, 8, 1), 0)
- * //=> Sun Aug 31 2014 00:00:00
- *
- * @example
- * // If week starts with Monday, set Sunday to 1 September 2014:
- * var result = setDay(new Date(2014, 8, 1), 0, {weekStartsOn: 1})
- * //=> Sun Sep 07 2014 00:00:00
- */
- function setDay (dirtyDate, dirtyDay, dirtyOptions) {
- var weekStartsOn = dirtyOptions ? (Number(dirtyOptions.weekStartsOn) || 0) : 0
- var date = parse(dirtyDate)
- var day = Number(dirtyDay)
- var currentDay = date.getDay()
- var remainder = day % 7
- var dayIndex = (remainder + 7) % 7
- var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay
- return addDays(date, diff)
- }
- module.exports = setDay
|