getWhatWeek.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. var setupDefaults = require('./setupDefaults')
  2. var staticDayTime = require('./staticDayTime')
  3. var staticWeekTime = require('./staticWeekTime')
  4. var helperGetDateTime = require('./helperGetDateTime')
  5. var toStringDate = require('./toStringDate')
  6. var isValidDate = require('./isValidDate')
  7. var isNumber = require('./isNumber')
  8. /**
  9. * 返回前几周或后几周的星期几
  10. *
  11. * @param {Date} date 日期
  12. * @param {Number} offsetWeek 周(默认当前周)、前几周、后几周
  13. * @param {Number} offsetDay 星期天(默认0)、星期一(1)、星期二(2)、星期三(3)、星期四(4)、星期五(5)、星期六(6)
  14. * @param {Number} firstDay 周视图的起始天,默认星期一
  15. * @return {Date}
  16. */
  17. function getWhatWeek (date, offsetWeek, offsetDay, firstDay) {
  18. date = toStringDate(date)
  19. if (isValidDate(date)) {
  20. var hasCustomDay = isNumber(offsetDay)
  21. var hasStartDay = isNumber(firstDay)
  22. var whatDayTime = helperGetDateTime(date)
  23. // 如果指定了天或周视图起始天
  24. if (hasCustomDay || hasStartDay) {
  25. var viewStartDay = hasStartDay ? firstDay : setupDefaults.firstDayOfWeek
  26. var currentDay = date.getDay()
  27. var customDay = hasCustomDay ? offsetDay : currentDay
  28. if (currentDay !== customDay) {
  29. var offsetNum = 0
  30. if (viewStartDay > currentDay) {
  31. offsetNum = -(7 - viewStartDay + currentDay)
  32. } else if (viewStartDay < currentDay) {
  33. offsetNum = viewStartDay - currentDay
  34. }
  35. if (customDay > viewStartDay) {
  36. whatDayTime += ((customDay === 0 ? 7 : customDay) - viewStartDay + offsetNum) * staticDayTime
  37. } else if (customDay < viewStartDay) {
  38. whatDayTime += (7 - viewStartDay + customDay + offsetNum) * staticDayTime
  39. } else {
  40. whatDayTime += offsetNum * staticDayTime
  41. }
  42. }
  43. }
  44. if (offsetWeek && !isNaN(offsetWeek)) {
  45. whatDayTime += offsetWeek * staticWeekTime
  46. }
  47. return new Date(whatDayTime)
  48. }
  49. return date
  50. }
  51. module.exports = getWhatWeek