helperCreateGetDateWeek.js 2.5 KB

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