下面的代码有什么问题?
也许只比较日期而不是时间会更简单。我也不确定如何做到这一点,我搜索了一下,但我找不到我的确切问题。
顺便说一句,当我在警报中显示这两个日期时,它们显示完全相同。
我的代码:
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);
}
});
有没有一种更简单的方法来比较日期而不包括时间?
var fromdate = new Date(MM/DD/YYYY);
var todate = new Date(MM/DD/YYYY);
if (fromdate > todate){
console.log('False');
}else{
console.log('True');
}
如果你的日期格式不同,那么使用moment.js库转换你的日期格式,然后使用上面的代码来比较两个日期
例子:
如果您的日期是“DD/MM/YYYY”,并希望将其转换为“MM/DD/YYYY”,请参阅下面的代码示例
var newfromdate = new Date(moment(fromdate, "DD/MM/YYYY").format("MM/DD/YYYY"));
console.log(newfromdate);
var newtodate = new Date(moment(todate, "DD/MM/YYYY").format("MM/DD/YYYY"));
console.log(newtodate);
我还在学习JavaScript,我找到的唯一方法是比较两个没有时间的日期,使用Date对象的sehours方法,并将小时、分钟、秒和毫秒设置为零。然后比较这两个日期。
例如,
date1 = new Date()
date2 = new Date(2011,8,20)
Date2将小时、分钟、秒和毫秒设置为0,但date1将它们设置为date1创建的时间。要去掉date1上的小时、分钟、秒和毫秒,请执行以下步骤:
date1.setHours(0,0,0,0)
现在您可以将两个日期仅作为日期进行比较,而不必担心时间元素。
我是这样做的:
var myDate = new Date($('input[name=frequency_start]').val()).setHours(0,0,0,0);
var today = new Date().setHours(0,0,0,0);
if(today>myDate){
jAlert('Please Enter a date in the future','Date Start Error', function(){
$('input[name=frequency_start]').focus().select();
});
}
因为我在这里没有看到类似的方法,而且我不喜欢将h/m/s/ms设置为0,因为它会导致在更改日期对象时精确过渡到本地时区的问题(我假设是这样),让我在这里介绍一下这个,几分钟前写的,lil函数:
+:易于使用,使一个基本的比较操作完成(比较日,月和年没有时间。)
-:这似乎与“开箱即用”的思维完全相反。
function datecompare(date1, sign, date2) {
var day1 = date1.getDate();
var mon1 = date1.getMonth();
var year1 = date1.getFullYear();
var day2 = date2.getDate();
var mon2 = date2.getMonth();
var year2 = date2.getFullYear();
if (sign === '===') {
if (day1 === day2 && mon1 === mon2 && year1 === year2) return true;
else return false;
}
else if (sign === '>') {
if (year1 > year2) return true;
else if (year1 === year2 && mon1 > mon2) return true;
else if (year1 === year2 && mon1 === mon2 && day1 > day2) return true;
else return false;
}
}
用法:
Datecompare (date1, '===', date2)
Datecompare (date1, '>', date2)
!datecompare(date1, '>', date2)进行较少或相等的检查
显然,您还可以在某些地方切换date1和date2,以实现任何其他简单的比较。
我知道这个问题已经有人回答了,这可能不是最好的方法,但在我的情况下,它工作得很好,所以我想它可能会帮助像我这样的人。
如果你有日期字符串为
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()的更多信息在这里参考
快乐的鳕鱼。
如果你真的是只比较日期而不比较时间组件,另一个解决方案可能感觉不对,但可以避免所有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和偏移量相比,您不太可能搞砸它,可能是以速度为代价的(我没有比较性能)