JS时间计算 - 两个日期之间发生日期的次数

时间:2014-06-24 14:57:51

标签: javascript jquery date

我真的需要一些JS时间计算的帮助。

基本上我需要计算两个日期之间每月一天发生的次数。

例如 -

2014年2月1日至2014年5月14日的第15个月日期为3 2014年2月1日至2014年5月16日期间的第15个月日期为4

我看过Jquery图书馆,但它估计一个月是30天,所以我不准确并考虑到闰年 - 28天等的月份......

它确实需要准确,因为它用于计费事件计算。这些日期可以多年使用,因此可能因为30天的事情而导致不公正。

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:2)

在Javascript Date构造函数中有一种稍微违反直觉的行为,如果您创建一个日期设置为0的新日期,它将假定该月的最后一天。您可以使用以下函数获取一个月内的天数:

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

Javascript日期对象具有闰年意识,因此您可以可靠地使用此功能。

然后,您只需计算开始日期和结束日期之间的月数,并检查每一个月,以确保当月数字实际存在。如果日期小于或等于28,您可以将此检查短路。

答案 1 :(得分:2)

可能有一百万种方法可以做到这一点......这是一种蛮力的方式:

// add a "addDays() method to Date"
Date.prototype.addDays = function(days)
{
    var dat = new Date(this.valueOf());
    dat.setDate(dat.getDate() + days);
    return dat;
}

// provide two dates and a day ordinal you want to count between the two
function numOrdinalsBetweenDts(Date1, Date2, theOrdinal) {
    var temp;

    if(Date2 < Date1) {  // put dates in the right order (lesser first)
        temp = Date1;
        Date1 = Date2;
        Date2 = temp;
    }

    var workDate = Date1;
    var ctr = 0;
    while(workDate < Date2) {    // iterate through the calendar until we're past the end
        if(workDate.getDate() == theOrdinal)   // if we match the ordinal, count it
            ctr++;
        workDate = workDate.addDays(1);   // move the calendar forward a day
    }
    return ctr;
}


var result = numOrdinalsBetweenDts(new Date("July 21, 1901"), new Date("July 21, 2014"), 2);
console.log(result);
alert(result);