下面的代码有什么问题?
也许只比较日期而不是时间会更简单。我也不确定如何做到这一点,我搜索了一下,但我找不到我的确切问题。
顺便说一句,当我在警报中显示这两个日期时,它们显示完全相同。
我的代码:
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);
}
});
有没有一种更简单的方法来比较日期而不包括时间?
这对我来说很管用:
export default (chosenDate) => {
const now = new Date();
const today = new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate()));
const splitChosenDate = chosenDate.split('/');
today.setHours(0, 0, 0, 0);
const fromDate = today.getTime();
const toDate = new Date(splitChosenDate[2], splitChosenDate[1] - 1, splitChosenDate[0]).getTime();
return toDate < fromDate;
};
在已接受的答案中,有时区问题,其他时间不是00:00:00
这个怎么样?
Date.prototype.withoutTime = function () {
var d = new Date(this);
d.setHours(0, 0, 0, 0);
return d;
}
它允许你像这样比较日期的日期部分,而不影响变量的值:
var date1 = new Date(2014,1,1);
new Date().withoutTime() > date1.withoutTime(); // true
使用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的第二个参数是进行比较的精度,可以是年、月、周、日、小时、分钟或秒中的任何一个。
在看到这个问题的同时,我决定发布另一个解决方案,因为我觉得它不太令人满意,至少对我的需求来说:
我曾经用过这样的东西:
var currentDate= new Date().setHours(0,0,0,0);
var startDay = new Date(currentDate - 86400000 * 2);
var finalDay = new Date(currentDate + 86400000 * 2);
这样,我就可以用我想要的格式来处理这些日期。但这只是为了我的需要,但我还是决定张贴它,也许它会帮助到别人