【问题标题】:How to tell if two dates are in the same day or in the same hour? [duplicate]如何判断两个日期是在同一天还是在同一小时? [复制]
【发布时间】:2017-10-06 21:35:54
【问题描述】:

JavaScript Date 对象比较日期和时间,包括,所以,如果你比较: time1.getTime() === time2.getTime(),如果至少有一毫秒不同,它们将是 "false"

我们需要的是一种按小时、日、周、月、年进行比较的好方法? 其中一些很简单,例如年份:time1.getYear() === time2.getYear() 但是对于日、月、小时,它会更加复杂,因为它需要多次验证或划分。

是否有任何不错的模块或优化代码来进行这些比较?

【问题讨论】:

标签: javascript typescript


【解决方案1】:

Date 原型的 API 可以让您检查年、月、日,这看起来简单而有效。

您需要从代码运行的语言环境的角度来决定您的应用程序是否需要相同的日期,或者是否应该基于 UTC 值进行比较。

function sameDay(d1, d2) {
  return d1.getFullYear() === d2.getFullYear() &&
    d1.getMonth() === d2.getMonth() &&
    d1.getDate() === d2.getDate();
}

有对应的UTC getter getUTCFullYear()getUTCMonth()getUTCDate()

【讨论】:

  • 也许先检查一天会更有效率 (getDate)。如果我们一起检查日期,则年份和月份可能相同,但日期更可能不同。我们可以通过仅在一次比较后将函数短路来节省一些检查。
  • @PaulRooney 说得好;同样,对原始时间戳进行初始范围检查可能是值得的。在现代运行时,我怀疑只有在非常频繁地进行比较时,这样的改进才会有意义。
  • @JonasMerhej 这不适用于数字,因为您会得到误报。例如,5 月 5 日(第 5 天,第 4 个月)将与 7 月 4 日(第 4 天,第 5 个月)相同
  • @newfolder 请原谅我的错误解释。你完全正确我的意思是添加为字符串,例如 '4+5' 将不同于 '5+4'
  • 伤心。 Python 更胜一筹。
【解决方案2】:
var isSameDay = (dateToCheck.getDate() === actualDate.getDate() 
     && dateToCheck.getMonth() === actualDate.getMonth()
     && dateToCheck.getFullYear() === actualDate.getFullYear())

这将确保日期在同一天。

阅读更多关于 Javascript Date to string

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    • 2012-09-22
    相关资源
    最近更新 更多