我想计算给定日期范围与今天的日期范围和给定的结束日期之间的差异。最终结果应该是第一步: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"})});
那会是正确的吗?谢谢!
答案 0 :(得分: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>
&#13;
您可以将不同的参数传递给.diff()
,您可以在几毫秒到几年的任何时间内获取它,只需看the docs。
答案 1 :(得分:0)
作为here的引用,Date on Date构造函数从0到11开始
月
表示月份的整数值,从1月的0开始到12月的11。
因此,您的示例t1
将导致Feb 13
而t2
为Mar 27
如果您与t2 - now
的{{1}}不同,那么它将比Jan 17
的结果更多小时
答案 2 :(得分:0)
我认为你需要这样的功能:
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);
答案 3 :(得分:-1)
为什么不使用Moment.js来操纵日期?我对你需要做什么有点困惑。但是有了Moment,你可以做以下事情:
moment().add(7, 'days').subtract(1, 'months').year(2009).hours(0).minutes(0).seconds(0);