我这里有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)
});
答案 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完成,但需要更多代码才能完成。