使用MomentJS确定日期是今天还是过去?

时间:2017-04-10 18:31:22

标签: javascript momentjs

我正在制作一个只显示当月的迷你日历,我已经想出了如何制作日历,这里是代码:

代码:

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

这很好用,我唯一的问题是弄清楚今天是天还是过去?

代码也在这里:https://jsfiddle.net/chghb3Lq/3/

2 个答案:

答案 0 :(得分:0)

使用像isSame()isBefore()isSameOrBefore()等方法。

它们每个都允许设置比较单位,如year month week day hour minute second

请参阅Query Section of moment docs

答案 1 :(得分:0)

时刻有isBeforeisAfterisSame个功能来比较时刻,正如文档所说:

  

如果要将粒度限制为毫秒以外的单位,请将单位作为第二个参数传递。

您的代码中有一些内容可以使用momentjs以简单的方式实现,而不是自己重新实现:

使用这些建议,您的代码可能如下所示:

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>