在JavaScript中,如何最好地确定一个日期是否为今天?

33

我在JavaScript中有一个日期对象,想要判断它是否是今天。最快的方法是什么?

我的担忧在于比较日期对象时可能会存在不同的时间,但是任何一天的任何时间都应该返回true


5
为节省时间(理解了吗?),建议使用Moment.js:http://momentjs.com/ - Ahmed Nuaman
5个回答

85

您可以使用 toDateString

var d = new Date()
var bool = (d.toDateString() === otherDate.toDateString());

谢谢@AKX修复了那个问题。不知道我当时怎么想的 :P - Joseph Marikle
1
@寻找知识 格式不是最重要的问题。原始问题假设你的变量一开始就是JavaScript日期对象格式。从JavaScript的角度来看,“01192015”在技术上是无效的日期格式(在控制台中使用“new Date('01192015')”会返回“Invalid Date”)。然而,使用标准的“01-19-2015”返回一个有效的日期对象,你可以使用它与今天的日期进行比较,使用“toDateString()”。 - Joseph Marikle

11

基于 toDateString() 的答案可能有效,但我个人会避免使用它们,因为它们基本上是在问错的问题。

这里提供了一个简单的实现:

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

MDN提供了JS Date对象API的良好概述,如果这不完全符合您的需求。


5
请勿链接至W3Schools,它们有误导性和常常不正确的内容。相反,请使用声誉更好的来源,例如Mozilla的优秀开发人员网络。 - Andrew Whitaker
我之前不知道W3Schools存在问题。已将链接更新为相关MDN文档页面。 - recf
+1,我认为这比toDateString更健壮。 - RobG
我也喜欢这个解决方案,因为你还使用时钟进行检查。 - mortenstarck
根据我的经验,这是最可靠的基本日期检查方法。使用toDateString()不可靠,因为任何格式上的微小差异都可能导致错误的检查。 - dandmcd

5
var someDate = new Date("6 Dec 2011").toDateString();
var today = new Date().toDateString();
var datesAreSame = (today === someDate);

3

2
我喜欢使用moment库。原始答案翻译成“最初的回答”。
moment('dd/mm/yyyy').isSame(Date.now(), 'day');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接