我想知道是否有人有JavaScript函数来返回2个日期之间的月数和天数?例如,如果通过了01/01/2013和03/01/2015(英国日期格式),它将返回24个月2天。我有几个月的时间,但我正在努力解决这些日子。我的表单上有两个日期字段,格式为dd / mm / yyyy。这是我到目前为止的代码:
function calculateDateDifference(){
var startDateValue=document.forms[0].StartDate.value;
var endDateValue=document.forms[0].EndDate.value;
var startDateArray=startDateValue.split("/");
var endDateArray=endDateValue.split("/");
var startDate= new Date(startDateArray[2], startDateArray[1], startDateArray[0]);
var endDate= new Date(endDateArray[2], endDateArray[1], endDateArray[0]);
var diffYears = endDate.getFullYear()-startDate.getFullYear();
var diffMonths = endDate.getMonth()-startDate.getMonth();
var diffDays = endDate.getDate()-startDate.getDate();
var months = ((diffYears*12) + diffMonths);
if (diffDays<0){
months=months-1;
}
alert(months + " months");
}
提前致谢, 尼尔。
答案 0 :(得分:0)
此函数将计算英国(小端)格式的两个日期之间的天数。
function subtractDates(firstDate, secondDate){
var fdObj, sdObj;
firstDate = littleToMiddleEndian(firstDate);
secondDate = littleToMiddleEndian(secondDate);
function littleToMiddleEndian(led){
var a = led.split("/")
return [a[1],a[0],a[2]].join("-");
}
fdObj = new Date(firstDate);
sdObj = new Date(secondDate);
return sdObj-fdObj/86400000;
}
var daysBetween = subtractDates("10/01/12","17/01/12");
console.log(daysBetween);
首先,它使用内部函数将日期从小端格式(dd-mm-yy)转换为Date
对象所需的中间格式(mm-dd-yy)。然后它创建两个Date对象并从另一个中减去一个,然后除以86400000(一天中的毫秒数),这将得到一个整数,表示两个日期之间的天数。
答案 1 :(得分:0)
感谢@Zazerat对this post
的回答我想出了一个解决方案。 @Jazerat提供了一个JSDate的缩减版本,我将其包括在内,可以轻松地在日期上进行月份调整。这是最终的代码:
Date.isLeapYear = function (year) {
return (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0));
};
Date.getDaysInMonth = function (year, month) {
return [31, (Date.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];
};
Date.prototype.isLeapYear = function () {
var y = this.getFullYear();
return (((y % 4 === 0) && (y % 100 !== 0)) || (y % 400 === 0));
};
Date.prototype.getDaysInMonth = function () {
return Date.getDaysInMonth(this.getFullYear(), this.getMonth());
};
Date.prototype.addMonths = function (value) {
var n = this.getDate();
this.setDate(1);
this.setMonth(this.getMonth() + value);
this.setDate(Math.min(n, this.getDaysInMonth()));
return this;
};
function daysInMonth(month,year) {
return new Date(year, month, 0).getDate();
}
function calculateLeasePeriod(){
var startDateValue=document.forms[0].StartDate.value;
var endDateValue=document.forms[0].EndDate.value;
if (endDateValue!="" && startDateValue!=""){
var startDateArray=startDateValue.split("/");
var endDateArray=endDateValue.split("/");
var startDate= new Date(startDateArray[2], startDateArray[1], startDateArray[0]);
var endDate= new Date(endDateArray[2], endDateArray[1], endDateArray[0]);
var diffYears = endDate.getFullYear()-startDate.getFullYear();
var diffMonths = endDate.getMonth()-startDate.getMonth();
var diffDays = endDate.getDate()-startDate.getDate();
var months = ((diffYears*12) + diffMonths);
if (diffDays<0){
months=months-1;
var adjStartDate = startDate.addMonths(months);
diffDays = endDate.getDate()-adjStartDate.getDate();
if (diffDays<0){
diffDays=daysInMonth(adjStartDate.getMonth(), adjStartDate.getYear())+ diffDays;
}
}
$("#PrimaryLeasePeriod").html(months + " months and " + diffDays + " days");
}else{
$("#PrimaryLeasePeriod").html("");
}
}
我希望其他人觉得这很有用!