vue中,写了一个js 来返回2018 到 2100 年的年月日,却发现闰年始终 只有 28天,求解答

以下是代码:

range.js

export default function (n, m, polyfill = false, unit = '') {
  let arr = []
  for (let i = n; i <= m; i++) {
    let value = (polyfill && i < 10 ? '0' + i : i) + unit
    arr.push(value)
  }
  return arr
}

date.js

import range from "./range";

function isLeapYear(y) {
  return y % 4 === 0 && (y % 100 !== 0 || y % 400 === 0);
}

function getDays(y, m) {
  y = Number(y);
  m = Number(m);
  let endDay = null;
  switch (m) {
    case 2:
      endDay = isLeapYear(y) ? 29 : 28;
      break;
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12:
      endDay = 31;
      break;
    case 4:
    case 6:
    case 9:
    case 11:
    default:
      endDay = 30;
      break;
  }
  const days = range(1, endDay, false);
  return days.map(day => {
    return {
      value: ("0" + day).length > 2 ? ("0" + day).substring(1) : "0" + day
    };
  });
}

const yearData = range(START_YEAR, END_YEAR, false);
const monthData = range(1, 12, false);

const cascadeMonthData = monthData.map(month => {
  return {
    value: ("0" + month).length > 2 ? ("0" + month).substring(1) : "0" + month,
    children: []
  };
});

const dateData = yearData.map(year => {
  const item = {
    value: year,
    children: cascadeMonthData.slice()
  };
  item.children.forEach(month => {
    month.children = getDays(year, month.value);
  });
  return item;
});


console.log(dateData)
阅读 2.5k
2 个回答

找到答案了,是因为map返回的是一个数组,而且引用的是一个地址的对象, 参考 这个结果

let value = (polyfill && i < 10 ? '0' + i : i) + unit

改为
let value = (polyfill && (i < 10 ? '0' + i : i)) + unit

value: ("0" + month).length > 2 ? ("0" + month).substring(1) : "0" + month

value: ((("0" + month).length) > 2 ? (("0" + month).substring(1)) : ("0" + month)),

运算优先级问题

推荐问题