将iso时间字符串转换为有效的momentjs格式并进行比较

时间:2019-07-17 06:27:20

标签: javascript momentjs

我想和momentjs进行比较。这些时间来自时间选择器,并使用ISO 8601格式,即24小时hh:mm(更多信息here)。

我想比较示例“ 01:45”和“ 13:36”。使用函数isSameOrBefore应该返回true。不幸的是

const valid = moment("01:45").isSameOrBefore("13:36")

不起作用,因为iso字符串使用错误的格式。我得到警告

  

弃用警告:提供的值不在公认的RFC2822中或   ISO格式。构造回落到js Date()的那一刻

我试图为此

const isoFormat = 'hh:mm'

const first = "01:45"
const second = "13:36"

const firstBeforeSecond = moment(first, isoFormat).isBefore(second, isoFormat)

console.log(firstBeforeSecond)
<script src="https://cdn.jsdelivr.net/npm/moment@2.24.0/moment.min.js"></script>

,但这仍然失败。我返回的值是false,这是不正确的。比较这些时间字符串的正确方法是什么?

3 个答案:

答案 0 :(得分:2)

利用这一刻是巨大的矫over过正

只需比较字符串

../

是真的

include function(path/to/my/folder/neededThis.php);

也是如此

原因是,在ISO 8601中,字符串具有相同的长度,因此将

"01:45" < "13:36" 始终是最小值,"13:36" === "13:36" 始终是最大值。

这是安全的,因为它们保留字符串并在其中包含“:”,因此不会被强制转换为数字或丢失前导0或类似的数字

答案 1 :(得分:1)

正确的语法是:

moment(first, isoFormat).isBefore(moment(second, isoFormat))

答案 2 :(得分:1)

尝试

var first = moment('01:45', 'hh:mm');
var second = moment('13:36', 'hh:mm');
console.log(first. isSameOrBefore(second));

指定格式不会发出任何警告:)