用格式'hh:mm t'比较javascript中的两个时间

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

本文关键字:两个 时间 比较 hh 格式 mm javascript      更新时间:2023-09-26

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

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


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

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

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

我如何在这种格式"hh:mm tt"中以适当的精度比较两个时间?有必要把日期和时间写在一起,然后比较日期和时间吗?

Update:由于safari不支持空格分隔日期,因此使用斜杠代替空格适用于所有浏览器。

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

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>