【问题标题】:How do I check if a date is between two ranges (ReactJS/JavaScript)? [duplicate]如何检查日期是否在两个范围之间(ReactJS/JavaScript)? [复制]
【发布时间】:2018-05-26 15:30:35
【问题描述】:

所以假设我有日期(在这个确切的字符串格式中)

2017-4-28

日期

2017-4-20
2017-5-16

如何检查第一个是否介于两者之间?

编辑:这些都是字符串

【问题讨论】:

  • 您可以使用moment.js 或javascript date object。
  • @Adriani6 你实际上可以直接使用<和>对抗Date对象,不需要getTime()
  • @samanime 从来不知道,谢谢。我们每天都在学习新东西;)
  • 在询问之前显然没有尝试对此进行研究。 How much research effort is expected of Stack Overflow users?
  • 鉴于字符串格式,在这种情况下使用localeCompare 并避免使用 Date 对象会更简单,例如:if (a.localeCompare(b) < 0) 然后 a 在 b 之前。 “2017-4-20”很可能会被某些内置解析器视为无效日期,而其他解析器则不会。

标签: javascript reactjs date


【解决方案1】:

const date = new Date('2017-4-28');
const start = new Date('2017-4-20');
const end = new Date('2017-5-16');

if (date > start && date < end) {
  console.log('in between');
} else {
  console.log('outside');
}

与大多数涉及日期的事情一样,最好将它们转换为Date 对象。您使用的格式是可以直接解析的格式,所以很简单,只需new Date(dateStr)。

之后,比较它们就很容易了。 &lt; 和 &gt; 操作符在 Date 对象上的工作就像你期望的那样,所以你可以检查 date &gt; start 和 date &lt; end。

【讨论】:

  • "与大多数涉及日期的事情一样......" 在这种情况下,使用localeCompare 比较字符串会更简单,无需求助于使用内置的-在解析器中(这是出了名的不可靠)。
  • 实际上,使用这种确切的格式是行不通的,因为 '2017-12-01' 会像之前的 '2017-2-01' 一样指示,因为它们没有使用两个-在所有情况下都是数字月份。虽然我同意解析器可能很挑剔,但我会说绝大多数浏览器至少可以正确获取 YYYY-MM-DD 格式。
  • 是的,您对 localCompare 的看法是正确的,我错过了格式错误的字符串。这与“绝大多数”无关,该字符串不是有效的 ISO 8601,因此浏览器可以尝试将其解析为其他内容或返回无效日期。你会得到什么结果,包括它是被解析为 UTC 还是本地的(我想这对于比较无关紧要,但在其他情况下可能)。
猜你喜欢
  • 2013-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多