jQuery日期范围之间的天数

时间:2014-03-06 15:46:46

标签: javascript jquery

我有一个包含2个输入文本(开始和结束)的表单,都带有jquery datapicker。 使用jQuery我想要获得在预定义的日期范围内(每年两个学期)应用不同费率的天数

For ex:

         start-date    end-date       rate

Range A: 01/01/2012 - 06/30/2012  -->  5%
Range B: 07/01/2012 - 12/31/2012  -->  10%  
Range C: 01/01/2013 - 06/30/2013  -->  15%
Range D: 07/01/2013 - 12/31/2013  -->  20%
and so on...

So if date inserted in "start" is = 08/15/2012
and the date inserted in "end" is = 11/20/2013

The number of days per range are:
Range A: 0
Range B: 138 with a rate 10%
Range C: 181 with a rate 15% 
Range D: 143 with a rate 20%

所以答案是,如何做以下事情:

(Math.min(end,rangeX_end-date) - Math.max(start,rangeX_start-date))*rangeX_rate

2 个答案:

答案 0 :(得分:1)

这是一个可以帮助你的功能.. 它的用法与sql相同..

function datediff(fromDate,toDate,interval) { 
            var second=1000, minute=second*60, hour=minute*60, day=hour*24, week=day*7; 
            fromDate = new Date(fromDate); 
            toDate = new Date(toDate); 
            var timediff = toDate - fromDate; 
            if (isNaN(timediff)) return NaN; 
            switch (interval) { 
                case "years": return toDate.getFullYear() - fromDate.getFullYear(); 
                case "months": return ( 
                    ( toDate.getFullYear() * 12 + toDate.getMonth() ) 
                    - 
                    ( fromDate.getFullYear() * 12 + fromDate.getMonth() ) 
                ); 
                case "weeks"  : return Math.floor(timediff / week); 
                case "days"   : return Math.floor(timediff / day);  
                case "hours"  : return Math.floor(timediff / hour);  
                case "minutes": return Math.floor(timediff / minute); 
                case "seconds": return Math.floor(timediff / second); 
                default: return undefined; 
            } 
        }

在这里更新小提琴向下滚动以查看“tidyier”版本; http://jsfiddle.net/uUqrT/5/

$("#calc").click(function () 
{
    addDaysRow($('#from').val(), $('#to').val());
});

function addDaysRow(fromDate, toDate) {
    var rangeAstart = new Date('01/01/2012');
    var rangeAend = new Date('06/30/2012');
    var rangeBstart = new Date('07/01/2012');
    var rangeBend = new Date('12/31/2012');
    var rangeCstart = new Date('01/01/2013');
    var rangeCend = new Date('06/30/2013');
    var rangeDstart = new Date('07/01/2013');
    var rangeDend = new Date('12/31/2013');

    var diff = datediff(fromDate, toDate, "days");

    $('#record > tbody:last').append('<tr><td>' + diff + '</td><td>' + diff + '</td><td>' +diff + '</td><td>' + diff + '</td><td>' + diff + '</td><td>' + diff + '</td><td>' + diff + '</td></tr>');
}

这应该让你开始走上正轨 - 不知道你想在这里做什么。

答案 1 :(得分:1)

你不需要jQuery,请参阅附件jsFiddle

var start = new Date('2011-04-11');
var end = new Date('2012-04-11');
var diff = Math.round((end- start)/(1000*60*60*24));

http://jsfiddle.net/4t7DU/