我有hh:mm:ss a
格式的两次。
喜欢
var StartTime="11:50:33 AM";
var EndTime= "10:50:33 AM;
我想要EndTime > StartTime
的验证。
我需要比较两次。
如果StartTime
大于EndTime
,那么我想显示错误消息
如果EndTime
大于StartTime
,那么我想运行下一个代码。
我试过以下代码
var t1 = moment($scope.StartTime, "hh:mm:ss a");
var t2 = moment($scope.EndTime, "hh:mm:ss a");
var t3 = moment(t2.diff(t1)).format("hh:mm:ss");
但这种做法并不好。
答案 0 :(得分:3)
您可以在Moment.js中使用isBefore()
功能来检查日期是否在另一个日期之前。请参阅此处的文档。 http://momentjs.com/docs/#/query/is-before/
请参阅下面的jsfiddle链接。
<强>代码强>
var startTime = moment('11:50:33 AM', 'h:mm:ss a');
var endTime = moment('10:50:33 AM', 'h:mm:ss a');
if(startTime.isBefore(endTime)) {
console.log("Correct. Start Time is below End Time");
} else {
console.log("Error. Start Time is more than End Time");
}
答案 1 :(得分:2)
如果没有像Moment.js这样的库,你可以考虑编写一些简单的函数,例如
var a = '11:50:33 AM';
var b = '10:50:33 AM';
// Times in h:m:s a format
function isStartBeforeEnd(start, end) {
var dates = [start, end].map(function(time) {
var b = time.split(/[: ]/);
return new Date(0,0,0, ((b[0] % 12) + (/^a/i.test(b[3])? 0 : 12)), b[1], b[2])
})
return dates[0] < dates[1];
}
console.log(isStartBeforeEnd(a, b)); // false
console.log(isStartBeforeEnd(b, a)); // true
或者,可能更可取的是,如果你有一个将时间减少到一些共同基数的功能,比如秒,你可以把时间转换成一个共同基数并比较:
// Times in h:m:s a format
function timeToSeconds(time) {
time = time.split(/[: ]/);
var hours = (time[0]%12) + (/^a/i.test(time[3]? 0 : 12));
return hours * 3600 + time[1]*60 + +time[2];
}
console.log(timeToSeconds(a) < timeToSeconds(b)); // false
console.log(timeToSeconds(b) < timeToSeconds(a)); // true
无论如何,只是为了思考。
答案 2 :(得分:0)
我相信您需要先将其转换为utc格式。
moment.utc(moment('11:50:33 AM',"hh:mm:ss a")
.diff(moment("10:50:33","hh:mm:ss a")))
.format("HH:mm:ss a")