以 'hh:mm tt' 格式比较 javascript 中的两个时间

Compare two time in javascript in format 'hh:mm tt'

我要比较两次
所以我尝试了这些:

"01:03 AM" > "01:02 AM"
> true


"01:01 AM" > "01:02 AM"
> false

在这些情况下结果是正确的,但在这个情况下不是:

"12:55 AM" > "03:55 AM"
> true

如何以这种格式 "hh:mm tt" 正确比较两次? 是否需要把日期和时间包括进去,然后比较日期和时间?

更新: 由于 Safari 不支持 space 分隔日期,因此使用斜杠代替 space 适用于所有浏览器。

您需要先将时间转换为日期对象,然后再转换为时间戳。然后你可以比较时间戳。您可以遵循这个基本示例:

var t = new Date();
d = t.getDate();
m = t.getMonth() + 1;
y = t.getFullYear();

//Convert time into date object
var d1 = new Date(m + "/" + d + "/" + y + " " + "12:55 AM");
var d2 = new Date(m + "/" + d + "/" + y + " " + "03:55 AM");

//Get timestamp
var t1 = d1.getTime();
var t2 = d2.getTime();
t1 > t2 ? alert("t1 greater than t2") : alert("t2 greater than t1");

但是比较复杂的时间,还是要用插件。

将时间转换为分钟并进行比较

function toMin(str) {
  var match = str.match(/(\d+):(\d+)\s(AM|PM)/)
  var min = (+match[1] > 11 ? 0 : match[1] * 60) + +match[2];
  if (match[3].toLowerCase() == 'pm') {
    min += 720;
  }
  return min;
}

function gt(v1, v2) {
  snippet.log(v1 + ' > ' + v2 + ': ' + (toMin(v1) > toMin(v2)))
}

function lt(v1, v2) {
  snippet.log(v1 + ' < ' + v2 + ': ' + (toMin(v1) < toMin(v2)))
}

//then

gt('12:30 AM', '01:00 AM');
lt('12:30 AM', '01:00 AM');
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>