Heim  >  Fragen und Antworten  >  Hauptteil

javascript – Verwenden Sie moment.js, um die Datenstruktur des Kalenders für den angegebenen Monat zu generieren

Bitte nennen Sie mir eine Best Practice. Ich schaue mir die API seit einem Tag an und verstehe die Grundlagen, also würde ich es tun Ich möchte Ihnen die endgültige Datenstruktur geben, zum Beispiel [[26,27,28, 1,2,3,4], [], [], ...]

Danke, ugh haha

天蓬老师天蓬老师2712 Tage vor1254

Antworte allen(3)Ich werde antworten

  • 大家讲道理

    大家讲道理2017-05-19 10:26:49

    moment.js API里面好像没有看到直接生成日历的方法

      monthDay(date) {
        const daysArr = [[], [], [], [], [], []]; // 6*7的日历数组
        const currentWeekday = moment(date).date(1).weekday(); // 获取当月1日为星期几
        const lastMonthDays = moment(date).subtract(1, 'month').daysInMonth(); // 获取上月天数
        const currentMonthDays = moment(date).daysInMonth(); // 获取当月天数
        const getDay = day => (day <= lastMonthDays ? day : (day <= (lastMonthDays + currentMonthDays)) ? day - lastMonthDays : day - (lastMonthDays + currentMonthDays)); // 日期处理
        for (let i = 0; i < 7; i += 1) {
          let virtualDay = (lastMonthDays - currentWeekday) + i;
          for (let j = 0; j < 6; j += 1) {
            daysArr[j][i] = getDay(virtualDay + (j * 7));
          }
        }
        console.table(daysArr);
      }
      ...
      monthDay(date); //date格式为moment能识别的格式
      ...

    大致想法:

    1. 构建一个6*7的数组daysArr

    2. 获取到上月天数、本月天数以及本月一号对应星期几(0表示周一)

    3. 然后计算出daysArr[0][0]对应的日期(上月天数 - 本月一号对应的星期)

    4. 根据daysArr[0][0]计算出daysArr其他元素的值

    Antwort
    0
  • 滿天的星座

    滿天的星座2017-05-19 10:26:49

    一维date数组可以思路:

    const dates = []
    for(let i = 0; i < 42; i+=1) {
      const startDate = moment('2017-05-20').date(1);
      dates[i] = startDate.weekday(i).date();
    };
    console.log(dates);

    Antwort
    0
  • ringa_lee

    ringa_lee2017-05-19 10:26:49

    let result = [...Array(42).keys()].reduce((acc, val) => {
        acc.push(moment().add(val, 'day').format('YYYY/MM/DD'));
        return acc;
    }, []);
    

    Antwort
    0
  • StornierenAntwort