【问题标题】:How to perform partial date comparison, ignoring the year, in javascript?如何在javascript中执行部分日期比较,忽略年份?
【发布时间】:2019-09-05 18:23:51
【问题描述】:

正如标题所说,我想编写一些基本代码来检查给定 JavaScript Date 对象的月份和日期是否在某个范围内。我知道要比较常规日期,可以执行以下操作...

date1 < date2 && date2 > date3

但是如何只能访问月份和日期?我知道Date 对象可以返回月份和日期,但老实说,我很难理解如何只比较它们。

【问题讨论】:

  • 您可以复制其中一个日期并将其年份更改为另一个日期的年份,这样您就可以在示例中使用比较方法。
  • @Titus — 从 2016 年 2 月 29 日的日期开始并将年份设置为 2019 年可能会产生意想不到的结果……;-)

标签: javascript date object comparison partial


【解决方案1】:

您可以从您的日期中提取一个可比较的“键”(例如month*100+day)并将这些键作为数字进行比较:

function compareByMD(date1, date2) {
    let a = date1.getMonth() * 100 + date1.getDate();
    let b = date2.getMonth() * 100 + date2.getDate();
    return (a > b) - (a < b);
}

//

console.log(
    [
        new Date(2009, 7, 15),
        new Date(2011, 8, 3),
        new Date(2019, 5, 3),
        new Date(2022, 7, 13),
    ].sort(compareByMD)
)

【讨论】:

  • 似乎是适量的hackyness,我觉得很舒服;谢谢你的建议!
  • 您可以添加解释为什么return a - b 不够。在我看来(a - b) - (b - a) => a - b - b + a => 2a - 2b => 2(a-b)。所以我想知道为什么 2 在这里是一个神奇的数字。
  • 我还是不明白为什么最后一行不是return a - b
猜你喜欢
  • 1970-01-01
  • 2023-03-15
  • 2016-02-14
  • 2013-05-10
  • 2011-12-02
  • 1970-01-01
  • 1970-01-01
  • 2012-05-08
相关资源
最近更新 更多