使用天/周和标题创建自定义日历

caf*_*ipt 6 html javascript datetime calendar momentjs

我正在创建一个使用时刻和反应的计划组件.我创建了一个自定义日历.如何将周的日子固定在顶部,就像普通日历一样?因此,如果我通过9月的日期对象,我想在每个日期之上呈现所有日期与星期几的正确日期.我在这里创造了一个小提琴.

https://jsfiddle.net/4dbwLg6b/

var dates = ['Thu Sep 01 2016 00:00:00 GMT+0800 (CST)', 'Fri Sep 02 2016 00:00:00 GMT+0800 (CST)', 'Sat Sep 03 2016 00:00:00 GMT+0800 (CST)', 'Sun Sep 04 2016 00:00:00 GMT+0800 (CST)', 'Mon Sep 05 2016 00:00:00 GMT+0800 (CST)', 'Tue Sep 06 2016 00:00:00 GMT+0800 (CST)', 'Wed Sep 07 2016 00:00:00 GMT+0800 (CST)', 'Thu Sep 08 2016 00:00:00 GMT+0800 (CST)', 'Fri Sep 09 2016 00:00:00 GMT+0800 (CST)', 'Sat Sep 10 2016 00:00:00 GMT+0800 (CST)', 'Sun Sep 11 2016 00:00:00 GMT+0800 (CST)', 'Mon Sep 12 2016 00:00:00 GMT+0800 (CST)', 'Tue Sep 13 2016 00:00:00 GMT+0800 (CST)',' Wed Sep 14 2016 00:00:00 GMT+0800 (CST)',' Thu Sep 15 2016 00:00:00 GMT+0800 (CST)', 'Fri Sep 16 2016 00:00:00 GMT+0800 (CST)', 'Sat Sep 17 2016 00:00:00 GMT+0800 (CST)', 'Sun Sep 18 2016 00:00:00 GMT+0800 (CST)', 'Mon Sep 19 2016 00:00:00 GMT+0800 (CST)',' Tue Sep 20 2016 00:00:00 GMT+0800 (CST)', 'Wed Sep 21 2016 00:00:00 GMT+0800 (CST)', 'Thu Sep 22 2016 00:00:00 GMT+0800 (CST)', 'Fri Sep 23 2016 00:00:00 GMT+0800 (CST)', 'Sat Sep 24 2016 00:00:00 GMT+0800 (CST)', 'Sun Sep 25 2016 00:00:00 GMT+0800 (CST)', 'Mon Sep 26 2016 00:00:00 GMT+0800 (CST)', 'Tue Sep 27 2016 00:00:00 GMT+0800 (CST)', 'Wed Sep 28 2016 00:00:00 GMT+0800 (CST)', 'Thu Sep 29 2016 00:00:00 GMT+0800 (CST)', 'Fri Sep 30 2016 00:00:00 GMT+0800 (CST)']
var Hello = React.createClass({
  render: function() {


    return <div className="container">
       {dates.map(function(day){
     return(
     <div className="calendarDay">
     {moment(day).format('D').toString()}
     </div>
     )
     })}
    </div>;
  }
});

ReactDOM.render(
  <Hello name="World" />,
  document.getElementById('container')
);
Run Code Online (Sandbox Code Playgroud)

这就是我所拥有的 在此输入图像描述

这就是我想要的,星期几对应于日期编号.星期一,星期二,星期三..... 在此输入图像描述

caf*_*ipt 12

得到它使用表作为标题,并使用时刻转换周和日

const startWeek = moment().startOf('month').week();
const endWeek = moment().endOf('month').week();


let calendar = []
for(var week = startWeek; week<endWeek;week++){
  calendar.push({
    week:week,
    days:Array(7).fill(0).map((n, i) => moment().week(week).startOf('week').clone().add(n + i, 'day'))
  })
}
Run Code Online (Sandbox Code Playgroud)

  • `for (var week = startWeek; week &lt;= endWeek; week++)` (3认同)

小智 6

根据以上所有答案:

let calendar = [];
const startDay = this.date.clone().startOf('month').startOf('week');
const endDay = this.date.clone().endOf('month').endOf('week');

let date = startDay.clone().subtract(1, 'day');

while (date.isBefore(endDay, 'day')) {
    calendar.push({
        days: Array(7).fill(0).map(() => date.add(1, 'day').clone())
    })
}
Run Code Online (Sandbox Code Playgroud)

  • 这应该是新接受的答案。当前接受的答案与 2019 年 12 月的效果不佳。 (2认同)