getPlanDate.js 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. /* 类型:week(按周),month(按月);
  2. num: 一次几周,一次几个月
  3. day指定时间:1~7(按周) 或 1~12(按月)
  4. */
  5. function getStartDate(type, day) {
  6. if(type === "week") {
  7. // 当前周
  8. var curDay = moment().isoWeekday();
  9. if(curDay >= day) {
  10. return moment().isoWeekday(day+7);
  11. } else {
  12. return moment().isoWeekday(day);
  13. }
  14. } else if(type === "month"){
  15. // 当前年份
  16. var curYear = moment().year();
  17. // 当前月份
  18. var curMonth = moment().month() + 1;
  19. // 当前日期
  20. var curDate = moment().date();
  21. if(curDate >= day) {
  22. return moment({year: curYear, month: curMonth, date : day}); // 注:month是从0开始算,范围:0~11
  23. } else {
  24. return moment({year: curYear, month: curMonth - 1, date : day});
  25. }
  26. }
  27. }
  28. /* 按周获取日期(最近3个月内)
  29. num: 一次几周
  30. day指定时间:1~7
  31. */
  32. function getFreDateArrByWeek(num, day) {
  33. // 开始时间
  34. var startDate = getStartDate("week",day);
  35. // 3个月后的截止时间
  36. var maxDate = startDate.clone().month(startDate.month() + 3);
  37. // 符合条件的3个月内的日期数组
  38. var result = [];
  39. var buff = startDate.clone();
  40. while(buff.isSameOrBefore(maxDate)) {
  41. result.push(buff.clone());
  42. buff.isoWeekday(buff.isoWeekday()+7*num);
  43. }
  44. return result;
  45. }
  46. /* 按周获取日期(最近12个月内)
  47. num: 一次几个月
  48. day指定时间:1~28
  49. */
  50. function getFreDateArrByMonth(num, day) {
  51. // 开始时间
  52. var startDate = getStartDate("month",day);
  53. // 12个月后的截止时间
  54. var maxDate = startDate.clone().month(startDate.month() + 12);
  55. // 符合条件的12个月内的日期数组
  56. var result = [];
  57. var buff = startDate.clone();
  58. while(buff.isSameOrBefore(maxDate)) {
  59. result.push(buff.clone());
  60. buff.month(buff.month()+num);
  61. }
  62. return result;
  63. }
  64. /* fre频率:weekN(N周/次),monthN(N月/次);
  65. day指定时间:1~7(按周) 或 1~12(按月)
  66. */
  67. function getFreDateArr(fre, day) {
  68. var reg = /^(week|month)(\d+)$/,
  69. types = reg.exec(fre),
  70. type = types[1],
  71. num = +types[2];
  72. if(type === "week") {
  73. return getFreDateArrByWeek(num, day);
  74. } else if(type === "month" && day <= 28) {
  75. return getFreDateArrByMonth(num, day);
  76. }
  77. throw new Error("参数有误!")
  78. }