在moment.js中比较两个(hh:mm:ss a)次之间的验证

时间:2015-04-27 12:57:56

标签: javascript angularjs momentjs

我有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");

但这种做法并不好。

3 个答案:

答案 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")