下面的代码有什么问题?

也许只比较日期而不是时间会更简单。我也不确定如何做到这一点,我搜索了一下,但我找不到我的确切问题。

顺便说一句,当我在警报中显示这两个日期时,它们显示完全相同。

我的代码:

window.addEvent('domready', function() {
    var now = new Date();
    var input = $('datum').getValue();
    var dateArray = input.split('/');
    var userMonth = parseInt(dateArray[1])-1;
    var userDate = new Date();
    userDate.setFullYear(dateArray[2], userMonth, dateArray[0], now.getHours(), now.getMinutes(), now.getSeconds(), now.getMilliseconds());

    if (userDate > now)
    {
        alert(now + '\n' + userDate);
    }
});

有没有一种更简单的方法来比较日期而不包括时间?


当前回答

我最终使用的一个选项是使用Moment.js的diff函数。通过调用start之类的函数。Diff(以“天”结尾)你可以用天数的整数来比较差异。

其他回答

date.js库对于这些事情很方便。它使所有与JS日期相关的脚本编写变得容易得多。

使用Moment.js

如果您可以选择包含第三方库,那么绝对值得一看Moment.js。它使使用Date和DateTime变得非常非常容易。

例如,查看一个Date是否紧跟在另一个Date之后,但排除它们的时间,你会这样做:

var date1 = new Date(2016,9,20,12,0,0); // October 20, 2016 12:00:00
var date2 = new Date(2016,9,20,12,1,0); // October 20, 2016 12:01:00

// Comparison including time.
moment(date2).isAfter(date1); // => true

// Comparison excluding time.
moment(date2).isAfter(date1, 'day'); // => false

传递给isAfter的第二个参数是进行比较的精度,可以是年、月、周、日、小时、分钟或秒中的任何一个。

比较日期的有效而正确的方法是:

Math.floor(date1.getTime() / 86400000) > Math.floor(date2.getTime() / 86400000);

它忽略了时间部分,适用于不同的时区,你也可以比较是否相等==。86400000为一天的毫秒数(= 24*60*60*1000)。

注意,相等操作符==永远不应该用于比较Date对象,因为当你期望相等测试工作时,它会失败,因为它是比较两个Date对象(而不是比较两个日期):

> date1;
outputs: Thu Mar 08 2018 00:00:00 GMT+1300

> date2;
outputs: Thu Mar 08 2018 00:00:00 GMT+1300

> date1 == date2;
outputs: false

> Math.floor(date1.getTime() / 86400000) == Math.floor(date2.getTime() / 86400000);
outputs: true

注意:如果你比较的Date对象的时间部分设置为0,那么你可以使用date1.getTime() == date2.getTime(),但它几乎不值得优化。在直接比较Date对象时,可以使用<、>、<=或>=,因为这些操作符首先在操作符进行比较之前调用. valueof()来转换Date对象。

确保你用一个4位数的年份构造userDate作为setFullYear(10,…)!== setFullYear(2010,…)。

这个JS将在设置日期之后更改内容 这里有同样的东西,但在w3schools上

date1 = new Date() date2 = new Date(2019,5,2) //the date you are comparing date1.setHours(0,0,0,0) var stockcnt = document.getElementById('demo').innerHTML; if (date1 > date2){ document.getElementById('demo').innerHTML="yes"; //change if date is > set date (date2) }else{ document.getElementById('demo').innerHTML="hello"; //change if date is < set date (date2) } <p id="demo">hello</p> <!--What will be changed--> <!--if you check back in tomorrow, it will say yes instead of hello... or you could change the date... or change > to <-->