四舍五入到最近的四分之一小时 - JavaScript

时间:2016-01-27 09:26:54

标签: javascript html

我正在尝试创建一个显示时间的select元素:

            <strong>Time:</strong>
            <select name="hours" id="hours">
                <option value="1">1</option>
                <option value="2">2</option>
                <option value="3">3</option>
                <option value="4">4</option>
                <option value="5">5</option>
                <option value="6">6</option>
                <option value="7">7</option>
                <option value="8">8</option>
                <option value="9">9</option>
                <option value="10">10</option>
                <option value="11">11</option>
                <option value="12">12</option>
                <option value="13">13</option>
                <option value="14">14</option>
                <option value="15">15</option>
                <option value="16">16</option>
                <option value="17">17</option>
                <option value="18">18</option>
                <option value="19">19</option>
                <option value="20">20</option>
                <option value="21">21</option>
                <option value="22">22</option>
                <option value="23">23</option>
                <option value="24">24</option>
            </select>
            :
            <select name="minutes" id="minutes">
                <option value="00">00</option>
                <option value="15">15</option>
                <option value="30">30</option>
                <option value="45">45</option>
            </select>

在我的JavaScript中,我试图显示当前时间。我目前的代码是四分之一小时上升或下降。所以,10:25 => 10:30 & 9:18 => 9:15

我想知道如何只围绕而不是四舍五入。

我的JavaScript:

var CurrentDate=new Date();
 $("#hours").val(CurrentDate.getHours());
 $("#minutes").val((((CurrentDate.getMinutes() + 7.5)/15 | 0) * 15) % 60);

2 个答案:

答案 0 :(得分:3)

试试这段代码:

var minutes = (parseInt((CurrentDate.getMinutes() / 15)) + 1) * 15;
minutes = minutes >= 60 ? minutes - 60 : minutes; 
$("#minutes").val(minutes);

代码的充实:

var minutes = (parseInt((CurrentDate.getMinutes() / 15)) + 1) * 15;

此行将当前minuts除以15,并将结果解析为整数,以切断浮点数,并添加+1以对其进行舍入。然后乘以15得到当前季度小时的正确分钟数

minutes = minutes >= 60 ? minutes - 60 : minutes; 

检查结果分钟是否大于60,如果是,则减去60而不是&#34;过冲&#34; 60分钟

$("#minutes").val(minutes);

设置给定标记的值

答案 1 :(得分:2)

此代码将“一小时”划分为4个间隔(0,1,2或3)(而不是60)。然后将其乘以15,得到00153045

在0到14分钟之间,该季度将显示“0”,在15到30之间将显示“15”,依此类推。

var CurrentDate=new Date();
$("#hours").val(CurrentDate.getHours());
$("#minutes").val(parseInt(CurrentDate.getMinutes()/15)*15);

编辑:我误解了这个问题,所以为了向上四分之一,我们应该使用Math.ceil()(或Math.round(),如果你喜欢到最接近的那个)我会而是做:

var CurrentDate=new Date();
var quarter = Math.ceil(CurrentDate.getMinutes()/15)*15;
$("#minutes").val(quarter%60);
$("#hours").val(parseInt(quarter/60)+CurrentDate.getHours());

但通常,这种时钟仅显示过去几分钟(意味着如果小时超过29分钟,我们通常仍会显示15分钟,因为它还不是30分钟)