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
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
|
|
|