37 lines
1.3 KiB
JavaScript
37 lines
1.3 KiB
JavaScript
var parse = require('../parse/index.js')
|
|
var startOfISOYear = require('../start_of_iso_year/index.js')
|
|
var differenceInCalendarDays = require('../difference_in_calendar_days/index.js')
|
|
|
|
/**
|
|
* @category ISO Week-Numbering Year Helpers
|
|
* @summary Set the ISO week-numbering year to the given date.
|
|
*
|
|
* @description
|
|
* Set the ISO week-numbering year to the given date,
|
|
* saving the week number and the weekday number.
|
|
*
|
|
* ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date
|
|
*
|
|
* @param {Date|String|Number} date - the date to be changed
|
|
* @param {Number} isoYear - the ISO week-numbering year of the new date
|
|
* @returns {Date} the new date with the ISO week-numbering year setted
|
|
*
|
|
* @example
|
|
* // Set ISO week-numbering year 2007 to 29 December 2008:
|
|
* var result = setISOYear(new Date(2008, 11, 29), 2007)
|
|
* //=> Mon Jan 01 2007 00:00:00
|
|
*/
|
|
function setISOYear (dirtyDate, dirtyISOYear) {
|
|
var date = parse(dirtyDate)
|
|
var isoYear = Number(dirtyISOYear)
|
|
var diff = differenceInCalendarDays(date, startOfISOYear(date))
|
|
var fourthOfJanuary = new Date(0)
|
|
fourthOfJanuary.setFullYear(isoYear, 0, 4)
|
|
fourthOfJanuary.setHours(0, 0, 0, 0)
|
|
date = startOfISOYear(fourthOfJanuary)
|
|
date.setDate(date.getDate() + diff)
|
|
return date
|
|
}
|
|
|
|
module.exports = setISOYear
|