日期之间的月份和日期 [英] Javascript Months and Days between dates

查看:108
本文介绍了日期之间的月份和日期的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想知道有没有人有JavaScript函数可以返回两个日期之间的月份和日期?例如,如果通过01/01/2013和03/01/2015(UK Date format)将返回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);
}

提前感谢
Niall。

解决方案

感谢@Zazerat在这篇文章



我已经提出了一个解决方案。 @Jazerat提供了一个JSDate的缩减版本,我可以轻松地在Date日期进行月度调整。这里是最终的代码:

  Date.isLeapYear = function(year){
return(((year%4 = == 0)&&(年%100!== 0))||(年%400 === 0));
};

Date.getDaysInMonth = function(year,month){
return [31,(Date.isLeapYear(year)?29:28),31,30,31,30,31, 31,30,31,30,31] [月];
};

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()));
返回这个;
};

function daysInMonth(month,year){
return new Date(year,month,0).getDate();
}


函数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();
}
}

我希望有人找到这个有用的! >

I'm wondering if anyone has a JavaScript function to return the number of months and days between 2 dates? For example, if passed 01/01/2013 and 03/01/2015 (UK Date format) It would return 24 Months 2 Days. I have the months part, but I'm struggling with the days piece. There are 2 date fields on my form on dd/mm/yyyy format. here's the code I have so far:

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");
}

Thanks in advance, Niall.

解决方案

Thanks to the answer by @Zazerat on this post

I have come up with a solution. @Jazerat provided a cut down version of JSDate which I included to easily allow for month adjustment on a Date. Here's the final code:

    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("");
    }
}

I hope someone else finds this useful!

这篇关于日期之间的月份和日期的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆