下面的代码有什么问题?
也许只比较日期而不是时间会更简单。我也不确定如何做到这一点,我搜索了一下,但我找不到我的确切问题。
顺便说一句,当我在警报中显示这两个日期时,它们显示完全相同。
我的代码:
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);
}
});
有没有一种更简单的方法来比较日期而不包括时间?
我知道这个问题已经有人回答了,这可能不是最好的方法,但在我的情况下,它工作得很好,所以我想它可能会帮助像我这样的人。
如果你有日期字符串为
String dateString="2018-01-01T18:19:12.543";
你只是想将date部分与JS中的另一个date对象进行比较,
var anotherDate=new Date(); //some date
然后你必须使用new Date("2018-01-01T18:19:12.543")将字符串转换为Date对象;
诀窍在这里:-
var valueDate =new Date(new Date(dateString).toDateString());
return valueDate.valueOf() == anotherDate.valueOf(); //here is the final result
我已经使用了JS的Date对象的toDateString(),它只返回日期字符串。
注意:不要忘记在比较日期时使用. valueof()函数。
关于.valeOf()的更多信息在这里参考
快乐的鳕鱼。
在两个日期上都使用toDateString()即可。toDateString不包括时间,因此对于同一日期的两次,值将相等,如下所示。
var d1 = new Date(2019,01,01,1,20)
var d2 = new Date(2019,01,01,2,20)
console.log(d1==d2) // false
console.log(d1.toDateString() == d2.toDateString()) // true
显然,在这个问题上其他地方表达的一些关于时区的担忧是有效的,但在许多情况下,这些是不相关的。
如果你真的是只比较日期而不比较时间组件,另一个解决方案可能感觉不对,但可以避免所有date()时间和时区问题,就是直接使用字符串比较来比较ISO字符串日期:
> "2019-04-22" <= "2019-04-23"
true
> "2019-04-22" <= "2019-04-22"
true
> "2019-04-22" <= "2019-04-21"
false
> "2019-04-22" === "2019-04-22"
true
你可以使用以下方法获取当前日期(UTC日期,不一定是用户的本地日期):
> new Date().toISOString().split("T")[0]
"2019-04-22"
我支持它的理由是程序员的简单性——与试图正确处理datetimes和偏移量相比,您不太可能搞砸它,可能是以速度为代价的(我没有比较性能)
在看到这个问题的同时,我决定发布另一个解决方案,因为我觉得它不太令人满意,至少对我的需求来说:
我曾经用过这样的东西:
var currentDate= new Date().setHours(0,0,0,0);
var startDay = new Date(currentDate - 86400000 * 2);
var finalDay = new Date(currentDate + 86400000 * 2);
这样,我就可以用我想要的格式来处理这些日期。但这只是为了我的需要,但我还是决定张贴它,也许它会帮助到别人