xe-utils
Version:
JavaScript 函数库、工具类
70 lines (62 loc) • 2.62 kB
JavaScript
import setupDefaults from './setupDefaults'
import staticDayTime from './staticDayTime'
import staticWeekTime from './staticWeekTime'
import isNumber from './isNumber'
import includes from './includes'
import toStringDate from './toStringDate'
import isValidDate from './isValidDate'
import getWhatWeek from './getWhatWeek'
import range from './range'
import map from './map'
import helperGetDateTime from './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
}
}
export default helperCreateGetDateWeek