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