我希望能够比较2时间字符串,如:
"4:00" > "5:00"
当然,这应该返回false。
是否有一种方法能够以线性方式Map或分配这些字符串的值(例如“5:00“的值应大于“4:00”的值)?不涉及特定日期。
我可以使用的方法是手动将其放入一个typescript枚举中,该枚举会自动添加递增值
enum time {
"01:00",
"02:00",..
}
console.log("Value is: "+time["01:00"])
console.log("Value is: "+time["02:00"])
该函数返回:
Value is: 0
Value is: 1
但是这个方法只在预定义的时间起作用。在上面的例子中,时间(“04:21”)将不起作用。
5条答案
按热度按时间b5lpy0ml1#
将它们创建为日期,然后进行比较。
fdx2calv2#
字符串比较应该在这里工作。
jum4pzuy3#
由于字符串的格式是固定的,所以我认为您可以将字符串分为小时部分和分钟部分,然后先比较小时,然后再比较分钟。
为了比较8(am)到7(pm)范围内的小时部分,我们可以简单地将其偏移+4,然后取模12,就像我们的小时系统突然从11跳回到0一样。
样本代码
rta7y2nd4#
由于您指定8-12在AM范围内,0-7在PM范围内:
由于JS不允许运算符重载,我们不能直接使用〉、〈或=,但是我们可以定义一个函数,在每种情况下返回-1、0或1(或者修改每个运算符的true/false,尽管这被省略了)。
x一个一个一个一个x一个一个二个x
7lrncoxx5#
(更新--假设7:00表示PM,8:00表示AM,我们需要一个比
padStart
更强的规范化。这个答案的旧版本如下。这里我们通过添加一个normalize
函数进行更新。)你不能这样使用
<
,JavaScript没有任何运算符重载,但是你可以写一个函数来重载,例如:我们包含一个
normalize
函数,它将时间转换为hh:mm
,将00:00
-07:59
范围内的时间转换为PM版本,对小时使用一点数学运算,并保持其他时间不变,除了在必要时添加前导0
。这里需要注意的重要一点是,
"10:15"
的比较结果大于"5:30"
,即使字符串的比较结果与"10:15"
相反。它的一个变体要有用得多,我们可以使用
-1
、+1
和0
来代替"less than"
、"greater than"
和"equal"
,这在大多数C风格语言中都是用来排序的,包括JS,所以如果我们这样重写:我们得到了一个标准比较器,可以在
Array.prototype.sort
和其他地方使用:我们可能想把它变成一个函数,它不修改原始数组,但返回一个新的排序数组,这是一个很小的添加:
一个三个三个一个
旧版本
你不能这样使用
<
,JavaScript没有任何运算符重载,但是你可以写一个函数来重载,例如:这里需要注意的重要一点是,
"10:15"
的比较结果大于"5:30"
,即使字符串的比较结果与"10:15"
相反。它的一个变体要有用得多,我们可以使用
-1
、+1
和0
来代替"less than"
、"greater than"
和"equal"
,这在大多数C风格语言中都是用来排序的,包括JS,所以如果我们这样重写:我们得到了一个标准比较器,可以在
Array.prototype.sort
和其他地方使用:我们可能想把它变成一个函数,它不修改原始数组,但返回一个新的排序数组,这是一个很小的添加: