Comparing two times with Moment JS
If you are always dealing with the time in h:mma
format, you can specify it when parsing...
var beginningTime = moment('8:45am', 'h:mma');
var endTime = moment('9:00am', 'h:mma');
console.log(beginningTime.isBefore(endTime)); // true
console.log(beginningTime.toDate()); // Mon May 12 2014 08:45:00
console.log(endTime.toDate()); // Mon May 12 2014 09:00:00
<script src="https://cdn.jsdelivr.net/momentjs/2.13.0/moment.min.js"></script>
It will use today as the date, so it won't work if you are spanning different days.
JSFiddle
As per documentation you are declaring moment variable incorrectly check allowed formates
http://momentjs.com/docs/#/parsing/string/
Instead of it you can use
var beginningTime = moment({
h: 8,
s: 45
});
var endTime = moment({
h: 9,
s: 0
});
console.log(beginningTime.isBefore(endTime)); //true
<script src="https://cdn.jsdelivr.net/momentjs/2.13.0/moment.min.js"></script>
8:45am
and 9:00am
are invalid dates
var beginningTime = moment('8:45am');
var endTime = moment('9:00am');
console.log(beginningTime.isValid(), endTime.isValid()) // FALSE
You should use a valid format: http://momentjs.com/docs/#/parsing/string/
And they suggest that for consistent results, should use http://momentjs.com/docs/#/parsing/string-format/
Eg.
moment("2010-10-20 4:30", "YYYY-MM-DD HH:mm"); // parsed as 4:30 local time
You should just open the console and try doing this manually: moment("8:45am").toDate()
It gives you Invalid Date, which is why you're not getting expected results. Whereas "2014-05-15 08:45" gives you a date.