You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

69 lines
2.5 KiB

var setupDefaults = require('./setupDefaults')
var staticDayTime = require('./staticDayTime')
var staticWeekTime = require('./staticWeekTime')
var isNumber = require('./isNumber')
var includes = require('./includes')
var toStringDate = require('./toStringDate')
var isValidDate = require('./isValidDate')
var getWhatWeek = require('./getWhatWeek')
var range = require('./range')
var map = require('./map')
var helperGetDateTime = require('./helperGetDateTime')
var nextStartMaps = map(range(0, 7), function (day) {
return [(day + 1) % 7, (day + 2) % 7, (day + 3) % 7]
})
function matchWeekStartDay (time, viewStartDay) {
var day = new Date(time).getDay()
return includes(nextStartMaps[viewStartDay], day)
}
function helperCreateGetDateWeek (getStartDate, checkCrossDate) {
return function (date, firstDay) {
var viewStartDay = isNumber(firstDay) ? firstDay : setupDefaults.firstDayOfWeek
var targetDate = toStringDate(date)
if (isValidDate(targetDate)) {
var targetWeekStartDate = getWhatWeek(targetDate, 0, viewStartDay, viewStartDay)
var firstDate = getStartDate(targetWeekStartDate)
var firstTime = helperGetDateTime(firstDate)
var targetWeekStartTime = helperGetDateTime(targetWeekStartDate)
var targetWeekEndTime = targetWeekStartTime + staticDayTime * 6
var targetWeekEndDate = new Date(targetWeekEndTime)
var firstWeekStartDate = getWhatWeek(firstDate, 0, viewStartDay, viewStartDay)
var firstWeekStartTime = helperGetDateTime(firstWeekStartDate)
var tempTime
if (targetWeekStartTime === firstWeekStartTime) {
return 1
}
if (checkCrossDate(targetWeekStartDate, targetWeekEndDate)) {
tempTime = helperGetDateTime(getStartDate(targetWeekEndDate))
for (; tempTime < targetWeekEndTime; tempTime += staticDayTime) {
if (matchWeekStartDay(tempTime, viewStartDay)) {
return 1
}
}
}
var firstWeekEndTime = firstWeekStartTime + staticDayTime * 6
var firstWeekEndDate = new Date(targetWeekEndTime)
var offsetNum = 1
if (checkCrossDate(firstWeekStartDate, firstWeekEndDate)) {
offsetNum = 0
tempTime = firstTime
for (; tempTime < firstWeekEndTime; tempTime += staticDayTime) {
if (matchWeekStartDay(tempTime, viewStartDay)) {
offsetNum++
break
}
}
}
return Math.floor((targetWeekStartTime - firstWeekStartTime) / staticWeekTime) + offsetNum
}
return NaN
}
}
module.exports = helperCreateGetDateWeek