javascript 计算javascript中两个日期之间的天数
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/7117875/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Count Number of days between 2 dates in javascript
提问by AabinGunz
Please help me get the number of days between today's date and some other date.. Here is my example
请帮我获取今天的日期和其他日期之间的天数.. 这是我的示例
It gives me NaN
它给了我 NaN
Here is what I came up with. My demo
这是我想出的。我的演示
var cellvalue="2011-08-18 11:49:01.0 IST";
var firstDate = new Date();
var secondDate = cellvalue.substring(0, cellvalue.length-4);
alert(diffOf2Dates(firstDate,secondDate));
function diffOf2Dates(todaysDate,configDate)
{
/*var udate="2011-08-18 11:49:01.0";
var configDate=new Date(udate);*/
var oneDay = 24*60*60*1000; // hours*minutes*seconds*milliseconds
var firstDate = todaysDate; // Todays date
var secondDate = new Date(configDate);
var diffDays = Math.abs((firstDate.getTime() - secondDate.getTime())/(oneDay));
console.info(firstDate+", "+secondDate);
//console.info(Math.ceil(diffDays));
return Math.ceil(diffDays);
}
回答by Pradeep
Use
利用
var firstDate = new Date(); // Todays date
var secondDate = new Date(2011,08,19, 11,49,01);
var diffDays = (firstDate.getDate() - secondDate.getDate());
It was showing NAN as your constructor is wrong. check yourself by alerting secondDate in your original code
它显示 NAN 因为你的构造函数是错误的。通过在原始代码中提醒 secondDate 来检查自己
Edit : above code will work if both dates are in same month, for general case
编辑:如果两个日期都在同一个月,上面的代码将起作用,对于一般情况
var oneDay = 24*60*60*1000;
var diffDays = Math.abs((firstDate.getTime() - secondDate.getTime()) / oneDay);
Also this will give result as fraction of date, so if you want to count whole dates you can use Math.ceil or Math.floor
此外,这会将结果作为日期的一部分,因此如果您想计算整个日期,您可以使用 Math.ceil 或 Math.floor
回答by Tejo
Use this:
用这个:
var udate="2011-08-19 11:49:01.0 GMT+0530";
The IST part is not valid
IST 部分无效
回答by Baz1nga
your input date is incorrect that is why it is failing. anyways here is some code that should help you with it.
您的输入日期不正确,这就是它失败的原因。无论如何,这里有一些代码可以帮助您。
var DateDiff = {
inDays: function(d1, d2) {
var t2 = d2.getTime();
var t1 = d1.getTime();
return parseInt((t2-t1)/(24*3600*1000));
},
inWeeks: function(d1, d2) {
var t2 = d2.getTime();
var t1 = d1.getTime();
return parseInt((t2-t1)/(24*3600*1000*7));
},
inMonths: function(d1, d2) {
var d1Y = d1.getFullYear();
var d2Y = d2.getFullYear();
var d1M = d1.getMonth();
var d2M = d2.getMonth();
return (d2M+12*d2Y)-(d1M+12*d1Y);
},
inYears: function(d1, d2) {
return d2.getFullYear()-d1.getFullYear();
}
}
var udate="2011-08-05 11:49:01";
var configDate=new Date(udate);
var oneDay = 24*60*60*1000; // hours*minutes*seconds*milliseconds
var firstDate = new Date(); // Todays date
var secondDate = new Date(udate);
alert(secondDate);
var diffDays = DateDiff .inDays(firstDate,secondDate);
alert(diffDays );
回答by Kanishka Panamaldeniya
if you have udate
format like 28-07-2011
you can use this
如果你有这样的udate
格式,28-07-2011
你可以使用这个
var checkindatestr = "28-07-2011";
var dateParts = checkindatestr.split("-");
var checkindate = new Date(dateParts[2], dateParts[1] - 1, dateParts[0]);
var now = new Date();
var difference = now - checkindate;
var days = difference / (1000*60*60*24);
alert(days);
回答by Wladimir Palant
You are calculating the difference correctly but the problem is that secondDate
is an invalid date. Date
cannot work with that date format, it needs "August 08, 2011 11:49:01"
as input - and if your date has a different format then you have to convert it. Note that Date
has only rudimentary timezone recognition, you can only be sure that "UTC" or "GMT" will be recognized correctly - you shouldn't use other time zones.
您正在正确计算差异,但问题是secondDate
日期无效。Date
无法使用该日期格式,它需要"August 08, 2011 11:49:01"
作为输入 - 如果您的日期具有不同的格式,则必须对其进行转换。请注意,Date
只有基本的时区识别,您只能确保“UTC”或“GMT”将被正确识别 - 您不应使用其他时区。
回答by Sang Suantak
The problem is with your udate
variable value. The date format is not correct. Try initializing the date in this format:
问题在于您的udate
变量值。日期格式不正确。尝试以这种格式初始化日期:
var secondDate = new Date(year,month,date);