将时间字符串转换为 moment.js 以使用 .isBetween

Convert time string to moment.js to use .isBetween

我有一个字符串 '10:30 AM',如何将它转换为字符串以便我可以使用 .isBetween() 函数?

每当我尝试执行 new Date(time)moment(new Date(time)) 时,我都会收到“无效日期”。此外,它说它是一个无效的日期,我是否必须有一个日期和时间才能使其有效?我假设 .isBetween 可能需要一些时间。

ECMAScript 日期只是自 1970 年 1 月 1 日 UTC 以来的毫秒偏移量,因此本质上是日期和时间 (UTC)。

如果您使用 moment.js,也可以使用它来解析字符串。在这种情况下,您必须使用 same tokens as for formatting(例如 h:mm A)提供字符串的格式。始终传递格式是个好主意,否则它可能会退回到内置解析器,这违背了使用库进行解析的目的。

当只给出时间时,moment.js 使用当前日期作为年月日:

let s = '10:30 AM';
// <current date as YYYY-MM-DD> 10:30
console.log(moment(s, 'h:mm A').format('YYYY-MM-DD H:mm')) 

let time1 = '6:23 AM';
let time2 = '9:18 PM';
let time3 = '10:35 PM';
let format = 'h:mm A';

console.log(
  moment(time2, format).isBetween(moment(time1, format), moment(time3, format))
);

console.log(
  moment(time1, format).isBetween(moment(time2, format), moment(time3, format))
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>