UNPKG

xe-utils

Version:

JavaScript 函数库、工具类

70 lines (62 loc) 2.62 kB
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