JQuery差异两个日期

时间:2014-11-14 17:47:40

标签: jquery datepicker

我这里有jQuery代码,用于计算两个日期的总和。现在,我想将答案(天)分为三个字段:年,月,日。

<i> Example: the answer is Days: 400 </i>

我想要的输出是

  

年: 1 月: 1 天: 5

以下是我的代码:

<p>Date 1: <input name="datepickerln1" id="datepickerln1" type="text" /></p>
<p>Date 2:<input name="datepickerln2" id="datepickerln2" type="text" /> </p>
days: <input name="total" id="total" type="text" readonly /><br/>
month: <input name="mtotal" id="mtotal" type="text" readonly /><br/>
year: <input name="ytotal" id="ytotal" type="text" readonly />
$(document).ready(function () {

    var selector = function (dateStr) {
        var d1 = $('#datepickerln1').datepicker('getDate');
        var d2 = $('#datepickerln2').datepicker('getDate');
        var diff = 0;
        if (d1 && d2) {
            diff = Math.floor((d2.getTime() - d1.getTime()) / 86400000); // ms per day
        }
        $('#total').val(diff);
    }
    $("#datepickerln1").datepicker();
    $('#datepickerln2').datepicker();
    $('#datepickerln1,#datepickerln2').change(selector)
});

http://jsfiddle.net/433d9/26/

1 个答案:

答案 0 :(得分:0)

快速而肮脏的方法是根据差异制作一个新的Date,然后从中拉出年,月和日(好...... 1970 - year因为1970年是new Date(0))。

适用于您的selector功能:

var selector = function (dateStr) {
    var d1 = $('#datepickerln1').datepicker('getDate'),
        d2 = $('#datepickerln2').datepicker('getDate'),
        diff = 0,
        d = 0,
        m = 0,
        y = 0;
    if (d1 && d2) {
        diff = new Date(d2.getTime() - d1.getTime());
        d = diff.getUTCDate() - 1;
        m = diff.getUTCMonth();
        y = Math.abs(1970 - diff.getUTCFullYear());
    }
    $('#total').val(d);
    $('#mtotal').val(m);
    $('#ytotal').val(y);
}

更新了小提琴:http://jsfiddle.net/433d9/28/

你可以使用另一个像moment.js这样的库,但是你想要的很简单,所以我不会为增加的开销而烦恼。如果你想使用moment.js库,你的选择器函数看起来会更像这样:

var selector = function (dateStr) {
    var d1 = $('#datepickerln1').datepicker('getDate'),
        d2 = $('#datepickerln2').datepicker('getDate');
    if (d1 && d2) {
        d1 = moment(d1);
        d2 = moment(d2);
    }
    $('#total').val(d1.from(d2));
}

这将得到如下结果:

  

大约一个月前

如果你特别需要几年,几个月和几天的精确分类,那么我绝对不会使用moment.js。虽然可以使用moment.js完成,但需要更多代码才能完成。