我正在制作一个只显示当月的迷你日历,我已经想出了如何制作日历,这里是代码:
代码:
var month = moment(),
index = 0,
maxDay = month.daysInMonth(),
start = month.startOf("month"),
offset = (start.isoWeekday() - 1 + 7) % 7; // start from monday
var week = []; // holds the weeks
var days = []; // holds the days
do {
var dayIndex = index - offset;
if(dayIndex >= 0 && dayIndex < maxDay){
days.push({
number: dayIndex + 1,
isPast: null, // stuck here boolean
isToday: null // stuck here boolean
})
}
if(index % 7 === 6){
week.push(days);
console.log(week);
days = [];
if (dayIndex + 1 >= maxDay) {
break;
}
}
index += 1;
} while(true);
这很好用,我唯一的问题是弄清楚今天是天还是过去?
答案 0 :(得分:0)
使用像isSame()
,isBefore()
,isSameOrBefore()
等方法。
它们每个都允许设置比较单位,如year month week day hour minute second
答案 1 :(得分:0)
时刻有isBefore
,isAfter
和isSame
个功能来比较时刻,正如文档所说:
如果要将粒度限制为毫秒以外的单位,请将单位作为第二个参数传递。
您的代码中有一些内容可以使用momentjs以简单的方式实现,而不是自己重新实现:
startOf('month')
和endOf('month')
作为循环的限制add(1, 'day')
增加循环索引isBefore
作为循环条件date()
获取月份日期(1-31)day()
获取星期几(0 =&gt;星期日,... 6 =&gt;星期六);或weekday()
以获取一周中某一天的区域设置。使用这些建议,您的代码可能如下所示:
var day = moment().startOf('month');
var endOfMonth = moment().endOf('month');
var week = [];
var month = [];
while( day.isBefore(endOfMonth) ){
week.push({
number: day.date(),
isPast: moment().isAfter(day, 'day'),
isToday: moment().isSame(day, 'day')
});
if( day.day() === 0 ){
month.push(week);
week = [];
}
day.add(1, 'day');
}
console.log(month);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>