|
1 | 1 | var setupDefaults = require('./setupDefaults')
|
2 | 2 |
|
| 3 | +var staticDayTime = require('./staticDayTime') |
3 | 4 | var staticWeekTime = require('./staticWeekTime')
|
4 | 5 |
|
5 | 6 | var isNumber = require('./isNumber')
|
| 7 | +var includes = require('./includes') |
| 8 | +var toStringDate = require('./toStringDate') |
6 | 9 | var isValidDate = require('./isValidDate')
|
7 | 10 | var getWhatWeek = require('./getWhatWeek')
|
| 11 | +var range = require('./range') |
| 12 | +var map = require('./map') |
8 | 13 |
|
9 | 14 | var helperGetDateTime = require('./helperGetDateTime')
|
10 | 15 |
|
11 |
| -function helperCreateGetDateWeek (getStartDate) { |
| 16 | +var nextStartMaps = map(range(0, 7), function (day) { |
| 17 | + return [(day + 1) % 7, (day + 2) % 7, (day + 3) % 7] |
| 18 | +}) |
| 19 | + |
| 20 | +function matchWeekStartDay (time, viewStartDay) { |
| 21 | + var day = new Date(time).getDay() |
| 22 | + return includes(nextStartMaps[viewStartDay], day) |
| 23 | +} |
| 24 | + |
| 25 | +function helperCreateGetDateWeek (getStartDate, checkCrossDate) { |
12 | 26 | return function (date, firstDay) {
|
13 | 27 | var viewStartDay = isNumber(firstDay) ? firstDay : setupDefaults.firstDayOfWeek
|
14 |
| - var targetDate = getWhatWeek(date, 0, viewStartDay, viewStartDay) |
| 28 | + var targetDate = toStringDate(date) |
15 | 29 | if (isValidDate(targetDate)) {
|
16 |
| - var targetOffsetDate = new Date(targetDate.getFullYear(), targetDate.getMonth(), targetDate.getDate()) |
17 |
| - var targerStartDate = getStartDate(targetDate) |
18 |
| - var targetFirstDay = targerStartDate.getDay() |
19 |
| - if (targetFirstDay > viewStartDay) { |
20 |
| - targerStartDate.setDate(7 - targetFirstDay + viewStartDay + 1) |
| 30 | + var targetWeekStartDate = getWhatWeek(targetDate, 0, viewStartDay, viewStartDay) |
| 31 | + var firstDate = getStartDate(targetWeekStartDate) |
| 32 | + var firstTime = helperGetDateTime(firstDate) |
| 33 | + var targetWeekStartTime = helperGetDateTime(targetWeekStartDate) |
| 34 | + var targetWeekEndTime = targetWeekStartTime + staticDayTime * 6 |
| 35 | + var targetWeekEndDate = new Date(targetWeekEndTime) |
| 36 | + var firstWeekStartDate = getWhatWeek(firstDate, 0, viewStartDay, viewStartDay) |
| 37 | + var firstWeekStartTime = helperGetDateTime(firstWeekStartDate) |
| 38 | + var tempTime |
| 39 | + if (targetWeekStartTime === firstWeekStartTime) { |
| 40 | + return 1 |
| 41 | + } |
| 42 | + if (checkCrossDate(targetWeekStartDate, targetWeekEndDate)) { |
| 43 | + tempTime = helperGetDateTime(getStartDate(targetWeekEndDate)) |
| 44 | + for (; tempTime < targetWeekEndTime; tempTime += staticDayTime) { |
| 45 | + if (matchWeekStartDay(tempTime, viewStartDay)) { |
| 46 | + return 1 |
| 47 | + } |
| 48 | + } |
21 | 49 | }
|
22 |
| - if (targetFirstDay < viewStartDay) { |
23 |
| - targerStartDate.setDate(viewStartDay - targetFirstDay + 1) |
| 50 | + var firstWeekEndTime = firstWeekStartTime + staticDayTime * 6 |
| 51 | + var firstWeekEndDate = new Date(targetWeekEndTime) |
| 52 | + var offsetNum = 1 |
| 53 | + if (checkCrossDate(firstWeekStartDate, firstWeekEndDate)) { |
| 54 | + offsetNum = 0 |
| 55 | + tempTime = firstTime |
| 56 | + for (; tempTime < firstWeekEndTime; tempTime += staticDayTime) { |
| 57 | + if (matchWeekStartDay(tempTime, viewStartDay)) { |
| 58 | + offsetNum++ |
| 59 | + break |
| 60 | + } |
| 61 | + } |
24 | 62 | }
|
25 |
| - return Math.floor((helperGetDateTime(targetOffsetDate) - helperGetDateTime(targerStartDate)) / staticWeekTime + 1) |
| 63 | + return Math.floor((targetWeekStartTime - firstWeekStartTime) / staticWeekTime) + offsetNum |
26 | 64 | }
|
27 | 65 | return NaN
|
28 | 66 | }
|
|
0 commit comments