2014-11-25 119 views
1

我想弄清楚一个公式来计算一小时的分数。我想要分六个小时的时间分解一小时。这意味着我将有如下表:JavaScript中的舍入时间

Input        Output 
-----        ------ 
5 hrs 0 mins      5.0 
5 hrs 1 min      5.0 
5 hrs 2 mins      5.0 
5 hrs 3 mins      5.0 

5 hrs 4 mins      5.1 
5 hrs 5 mins      5.1 
5 hrs 6 mins      5.1 
5 hrs 7 mins      5.1 
5 hrs 8 mins      5.1 
5 hrs 9 mins      5.1 

5 hrs 10 mins      5.2 
5 hrs 11 mins      5.2 
5 hrs 12 mins      5.2 
5 hrs 13 mins      5.2 
5 hrs 14 mins      5.2 
5 hrs 15 mins      5.2 

5 hrs 16 mins      5.3 
... 

目前,我有以下几点:

var d = new Date(); 
var h = d.getHours(); 
var m = d.getMinutes(); 
var fraction = Math.floor(m/60); 

var result = h + '.' + fraction; 

小数部分是不工作的权利。在这种情况下,我不确定如何处理,有一些四舍五入等等。我会感谢任何能够帮助我解决这个问题的人。

谢谢!

+4

那么“m”总是小于60,所以'm/60'总是小数。因此,调用'.floor()'因此总是会产生0.如果你用“6”来分割,那么你会感兴趣的单位呢? – Pointy 2014-11-25 14:28:28

+0

'fraction =(m/60).toFixed(1)' – pawel 2014-11-25 14:30:57

回答

2

你必须适当地运用一点逻辑format a duration with javascript。逻辑是需要考虑一小时内的最后几分钟。以下应该适合你:

function FormatDuration(duration) { 
    // Retrieve the hours and minutes 
    var hrs = duration.getHours(); 
    var mins = duration.getMinutes(); 

    // Convert the minutes to a fraction of an hour. 
    var tenths = ((mins/60).toFixed(1) * 10); 
    if (tenths === 10) { 
    tenths = 0; 
    hrs = hrs + 1; 
    } 
    return hrs + '.' + tenths; 
} 
1

除以60将始终给你一个介于0和1之间的值,这意味着floor()将始终返回0(除非m等于60)。您可以通过6分改为:

var fraction = Math.floor(m/6); 

测试:

Math.floor(6/6);  // 1 
Math.floor(3/6);  // 0 
Math.floor(30/6); // 5 
Math.floor(59/6); // 9 
+2

这就好比用6来代替60 ... – Pointy 2014-11-25 14:32:20

+0

@Pointy doh!这甚至不是一个星期一,所以我没有任何理由...... – 2014-11-25 14:34:30

+0

不要感觉不好 - 我不得不在一张纸上试试它,以确保我得到它正确:) – Pointy 2014-11-25 14:37:23

0

我不知道这是否是正确的,但这些操作都是符合您的号码:

var fraction = Math.round(m/6.1)/10; 

我用6.1将数字减少一个,因为只有6个3分钟变成.1而不是4分钟变成.1

这导致58个ð59分钟是整个1.0,这会让你的时间碰到下一个。不知道这是你想要的样品,因为你的样品只需要16分钟。

我想出了0到59的数字,这是一个很好的方法来测试这些类型的问题。