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

Javascript 比较moment.js中两次(hh:mm:ss a)之间的验证,javascript,angularjs,momentjs,Javascript,Angularjs,Momentjs,我有两次使用hh:mm:ss a格式 像 我想要验证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

我有两次使用
hh:mm:ss a
格式

我想要验证
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");
但这种做法并不好

您可以使用Moment.js中的
isBefore()
函数检查一个日期是否早于另一个日期。请参阅此处的文档

请参阅下面的链接。

代码

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");
}
您可以使用Moment.js中的
isBefore()
函数检查一个日期是否早于另一个日期。请参阅此处的文档

请参阅下面的链接。

代码

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

我认为您需要首先将其转换为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
var a='11:50:33 AM';
变量b=‘上午10:50:33’;
//h:m:s格式的时间
函数isStartBeforeEnd(开始,结束){
变量日期=[开始,结束].map(函数(时间){
var b=时间分割(/[:]/);
返回新日期(0,0,0,((b[0]%12)+(/^a/i.test(b[3])?0:12)),b[1],b[2])
})
返回日期[0]<日期[1];
}
console.log(isStartBeforeEnd(a,b));//假的
console.log(isStartBeforeEnd(b,a));//真的
或者,可能更可取的是,如果您有一个将时间减少到某个公共基数(例如秒)的函数,您可以将时间转换为公共基数并进行比较:

// 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
//h:m:SA格式的时间
函数timeToSeconds(时间){
time=time.split(/[:]/);
变量小时数=(时间[0]%12)+(/^a/i.test(时间[3]?0:12));
返程时间*3600+时间[1]*60+时间[2];
}
console.log(timeToSeconds(a)

不管怎样,只是思考问题。

< P>没有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
var a='11:50:33 AM';
变量b=‘上午10:50:33’;
//h:m:s格式的时间
函数isStartBeforeEnd(开始,结束){
变量日期=[开始,结束].map(函数(时间){
var b=时间分割(/[:]/);
返回新日期(0,0,0,((b[0]%12)+(/^a/i.test(b[3])?0:12)),b[1],b[2])
})
返回日期[0]<日期[1];
}
console.log(isStartBeforeEnd(a,b));//假的
console.log(isStartBeforeEnd(b,a));//真的
或者,可能更可取的是,如果您有一个将时间减少到某个公共基数(例如秒)的函数,您可以将时间转换为公共基数并进行比较:

// 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
//h:m:SA格式的时间
函数timeToSeconds(时间){
time=time.split(/[:]/);
变量小时数=(时间[0]%12)+(/^a/i.test(时间[3]?0:12));
返程时间*3600+时间[1]*60+时间[2];
}
console.log(timeToSeconds(a)

总之,这是值得思考的。

时区是不相关的,只要它们都是相同的。@RobG-不一定。如果在前向DST转换的当天运行,其中一个值可能会落入本地时区的DST间隙中。:)那将是不同的时区。时区是不相关的,只要它们都是相同的。@RobG-不一定。如果在前向DST转换的当天运行,其中一个值可能会落入本地时区的DST间隙中。:)那将是不同的时区。从纯粹主义的角度来看,认识到将一个纯时间值与另一个纯时间值进行比较是无效的。你还需要一个日期——或者至少是两个时间在同一天的限制。没有这种限制,这是一个毫无意义的比较。例如,“上午12:00”是在“下午12:00”之前还是之后?这取决于他们是否在同一天。考虑到在很多情况下,时间范围可能跨越午夜——例如“晚上10点-2:00”是四小时。从纯粹主义的角度来看,认识到只将时间值与另一个时间值进行比较是无效的。你还需要一个日期——或者至少是两个时间在同一天的限制。没有这种限制,这是一个毫无意义的比较。例如,“上午12:00”是在“下午12:00”之前还是之后?这取决于他们是否在同一天。考虑到在许多情况下,一个时间范围可能跨越午夜——例如“10:00 PM -2:00 AM”是四小时。只要我们断言这两个值落在相同的日历日期,并且都是当天的有效时间(不在DST间隙中),那么这就是正确答案。只要我们断言两个值都在同一个日历日期,并且都是当天的有效时间(不在DST间隔内),那么这就是正确答案。