日期和今天之间的差异

Difference between dates and today

我想计算给定日期范围与今天的日期范围和给定结束日期之间的差异。第一步的最终结果应该是这样的:3400 小时中的 63% 已经用完了。好的,因此我尝试执行以下操作:

//A_diffference between given dates
var t1 = new Date(2015, 1, 13, 13, 20, 0, 0);
var t2 = new Date(2015, 2, 27, 13, 20, 0, 0);
var dif = t2.getTime() - t1.getTime();
var gesamt = Math.abs(dif / 3600000); 
    //B_Difference between today and given date
var jetzt = new Date();
var dif2 = t2.getTime() - jetzt.getTime();
var noch = Math.abs(dif2 / 3600000); 
//C_Difference between the 2
    var bereits = gesamt - noch;
var prozent = (bereits/gesamt)*100;

但是我的 B-block 中的某些地方一定是错误的,因为我总是从那里得到更多的时间,所以它真的应该是。

有人可以告诉我什么吗,也许可以提示我如何使它更优雅一些?

因为我想稍后使用计算出的百分比标记作为标记元素的宽度,所以我想定期调用该查询,从而更新我的元素的宽度,我会这样做:

proz=prozent+"%"; .ready(function(){$(".foo").css({width:"proz"})});

这样对吗?谢谢!

为什么不使用 Moment.js 来操作日期?我对您具体需要做什么感到有些困惑。但是使用 Moment,您可以执行以下操作:

moment().add(7, 'days').subtract(1, 'months').year(2009).hours(0).minutes(0).seconds(0);

如果您想在 Javascript 中进行合理的日期时间管理,您最终可能会选择 Moment.js

 var t1 = moment('2015-01-13T13:20Z');
 var t2 = moment('2015-02-27T13:20Z');
 var difference = t2.diff(t1, 'days');

 var d = document.createElement("span");
 d.appendChild(document.createTextNode('start: ' + t1.format("DD MMMM YYYY") + '; '));
 d.appendChild(document.createTextNode('end: ' + t2.format("DD MMMM YYYY") + '; '));
 d.appendChild(document.createTextNode('difference: ' + difference + ' days'));
 document.body.appendChild(d);
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.9.0/moment.min.js"></script>

可以给.diff()传不同的参数,从毫秒到年都可以得到,具体看the docs.

作为 here 的参考,Date 构造函数的月份从 0 到 11

month

Integer value representing the month, beginning with 0 for January to 11 for December.

所以在你的例子中 t1 将导致 Feb 13t2Mar 27

如果您与 t2 - now 不同,即 Jan 17,那么它将变得比 t2 - t1

的结果更小时

我认为您需要这样的功能:

function spentTime(startDate, endDate){
   var sd = startDate.getTime(), sf = Math.abs(new Date().getTime()-sd);
   return {percent:(Math.abs(sd-endDate.getTime())/sf)*100, total_hours:sf/3600000};
}

var spent = spentTime(new Date(2015, 1, 13, 13, 20, 0, 0), new Date(2015, 2, 27, 13, 20, 0, 0));
console.log(spent.percent);
console.log(spent.total_hours);