最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Determine if the date is today or is in the past using MomentJS? - Stack Overflow

programmeradmin6浏览0评论

Im building a mini calendar that just displays the current month, I have figured out how to map out the calendar, here is the code:

Code:

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

This works fine, the only issue Im having is to figure out if the day is today or its in the past?

the code is here also: /

Im building a mini calendar that just displays the current month, I have figured out how to map out the calendar, here is the code:

Code:

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

This works fine, the only issue Im having is to figure out if the day is today or its in the past?

the code is here also: https://jsfiddle/chghb3Lq/3/

Share Improve this question asked Apr 10, 2017 at 18:31 Brain YoungBrain Young 1451 silver badge12 bronze badges 1
  • Compare it to a date created with the current date and the time set to exactly midnight. Any date less than that must not be for the same day as "today". – Pointy Commented Apr 10, 2017 at 18:37
Add a ment  | 

2 Answers 2

Reset to default 2

Moment has isBefore, isAfter and isSame functions to pare moments and as the docs says:

If you want to limit the granularity to a unit other than milliseconds, pass the units as the second parameter.


There are a couple of things in your code that you can achieve in a simple way using momentjs instead of reimplementing by yourself:

  • To loop from the first day of the month until the last day you can use:
    • startOf('month') and endOf('month') as limit of the loop
    • add(1, 'day') to increment loop index
    • isBefore as loop condition
  • Use date() to get date of the month (1-31)
  • Use day() to get day of the week (0 => Sunday, ... 6 => Saturday); or weekday() to get day of the week locale aware.

Using these suggestions your code could be like the following:

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./ajax/libs/moment.js/2.18.1/moment.min.js"></script>

Use moment methods like isSame() , isBefore(), isSameOrBefore() etc.

They each allow setting parison units like year month week day hour minute second

See Query Section of moment docs

发布评论

评论列表(0)

  1. 暂无评论