index.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. const month = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'],
  2. day = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31'],
  3. getTime = require("../../utils/getTime");
  4. Component({
  5. /**
  6. * 组件的属性列表
  7. */
  8. properties: {
  9. startDate: {
  10. type: String,
  11. value: "2022-02-08"
  12. },
  13. endDate: {
  14. type: String,
  15. value: getTime.formatTime(new Date(), '-').split(' ')[0]
  16. },
  17. getDate: {
  18. type: Function
  19. }
  20. },
  21. /**
  22. * 组件的初始数据
  23. */
  24. data: {
  25. value: [9, 3, 3]
  26. },
  27. lifetimes: {
  28. ready() {
  29. let end = this.data.endDate.split('-')[0];
  30. let years = [];
  31. //从开始到结束 渲染年数
  32. for (let start = this.data.startDate.split('-')[0] - 0; start <= end; start++) {
  33. years.push(start)
  34. };
  35. this.setData({
  36. years
  37. });
  38. //开始处理
  39. this.handleChange(this.data.startDate)
  40. }
  41. },
  42. /**
  43. * 组件的方法列表
  44. */
  45. methods: {
  46. /* 处理日期改变 */
  47. handleChange(date) {
  48. let arr = date.split('-'),
  49. start = this.data.startDate.split('-'),
  50. end = this.data.endDate.split('-');
  51. let m = arr[1] - 0;
  52. //选择年==开始年 删除未开始的月
  53. this.setData({
  54. months: (arr[0] == start[0]) ? month.slice(start[1] - 1) : month
  55. })
  56. if (arr[0] == start[0]) {
  57. //选择年==开始年&&开始年月==选择年月 删除未开始日
  58. this.handleDays(arr[0], m, (m == start[1] - 0) ? start[2] - 0 : 0);
  59. } else if (arr[0] == end[0]) {
  60. //选择年==结束年 删除多余月
  61. let ms = JSON.parse(JSON.stringify(month))
  62. this.setData({
  63. months: ms.slice(0, end[1] - 0)
  64. })
  65. this.handleDays(arr[0], m, 0);
  66. } else {
  67. //其他年份处理日
  68. this.handleDays(arr[0], m, 0);
  69. }
  70. },
  71. /* 处理日 */
  72. handleDays(y, m, d) {
  73. let arr1 = [1, 3, 5, 7, 8, 10, 12],
  74. days = JSON.parse(JSON.stringify(day)),
  75. end = this.data.endDate.split('-');
  76. if (m == 2) {
  77. //二月份的话判断是否为闰年
  78. days = (y % 4 == 0) ? days.slice(0, 29) : days.slice(0, 28)
  79. } else {
  80. //其他月份判断有无31日
  81. (arr1.includes(m)) ? '' : days.pop();
  82. };
  83. if (y == end[0] && m == end[1]) {
  84. days = days.slice(0, end[2] - 0)
  85. }
  86. //如果是开始年传递过来 会裁剪掉多余的日
  87. this.setData({
  88. days: (d == 0) ? days : days.slice(d - 1)
  89. });
  90. },
  91. pickerChange({
  92. detail
  93. }) {
  94. let arr = detail.value;
  95. this.handleChange(`${this.data.years[arr[0]]}-${this.data.months[arr[1]]}-${this.data.days[arr[2]]}`)
  96. this.triggerEvent("getDate", `${this.data.years[arr[0]]}-${this.data.months[arr[1]]}-${this.data.days[arr[2]]}`);
  97. },
  98. }
  99. })