比较 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

总之,深思一下。