Moment JS - Daily Availability Calendar

by dbasch

HTML

<script src="https://getfirebug.com/firebug-lite-debug.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/moment.js/2.5.1/moment.min.js"></script>

JavaScript

var daysOfWeekAvailable = {
    4: true,
    5: true
}

var signupEndTime = moment('13:00', "HH:mm");

// var availabilityCalendar = {
//   '0'  : {
//           'dayOfWeek'         : m.format('dddd'), 
//           'dayOfMonth'        : m.format('D'),
//           'month'             : m.format('MMM'),
//           'available'         : false,
//           'currentDay'        : true
//           },
//   ....
// }  

var availabilityCalendar = [];
var now = moment();
var inOneWeek = moment().add('days', 6);
var available;

// loop over the next 7 days
for (var dateIterator = now;
dateIterator.isBefore(inOneWeek);
dateIterator.add('days', 1)) {

    // assume no availability
    available = false;

    // loop over the available days and break
    // 0 based week index    
    Object.keys(guestlist.daysOfWeekAvailable).some(function (key) {

        // if the day of the week is an available day
        if (guestlist.daysOfWeekAvailable[key] === true && dateIterator.day() == key) {

            available = true;

            // if the availabe date is today check if the time
            // is after the guestlist signup end (cutoff) time 
            if (dateIterator.isSame(moment(), 'day')) {

                // make our signup cutoff time today because
                // we store the cutoff time as UTC in a moment object
                // which includes an irelevant day, month, year, etc..
                var _signupEndTime = moment(guestlist.signupEndTime, "YYYY-MM-DD,HH:mm:ss.sss").format("HH:mm");

                console.log(_signupEndTime);

                console.log(moment().isAfter(_signupEndTime));

                // no availability if the current time
                // is after the guestlist signup end (cutoff) time 
                if (moment().isAfter(_signupEndTime)) {
                    available = false;
                }
            }

            return true;

        }
    });

    availabilityCalendar.push({
        'dayOfWeek':...