比较 moment.js 中两次 (hh:mm:ss a) 之间的验证
compare validation between two (hh:mm:ss a) times in moment.js
我有两次 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");
但是这个make做的不好。
您可以使用 Moment.js 中的 isBefore()
函数来检查一个日期是否在另一个日期之前。请参阅此处的文档。 http://momentjs.com/docs/#/query/is-before/
见下文jsfiddlelink。
代码
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");
}
我相信你需要先把它转换成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")
如果没有像 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
总之,深思一下。
我有两次 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");
但是这个make做的不好。
您可以使用 Moment.js 中的 isBefore()
函数来检查一个日期是否在另一个日期之前。请参阅此处的文档。 http://momentjs.com/docs/#/query/is-before/
见下文jsfiddlelink。
代码
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");
}
我相信你需要先把它转换成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")
如果没有像 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
总之,深思一下。