首頁  >  問答  >  主體

javascript - 用moment.js產生指定月份的日曆的資料結構

求給個最佳實踐, 對moment不熟(api看了一天了,基礎的都了解了), 不想走冤枉路, 求給出最終數據結構 就行, 比如[[ 26,27,28,1,2,3,4], [], [], ...]

#感謝, 嗚哈哈

#
天蓬老师天蓬老师2712 天前1259

全部回覆(3)我來回復

  • 大家讲道理

    大家讲道理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其他元素的值

    回覆
    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);

    回覆
    0
  • ringa_lee

    ringa_lee2017-05-19 10:26:49

    雷雷

    回覆
    0
  • 取消回覆