2

我有一个选择下拉列表,时间间隔为 30 分钟,例如

11:00 AM, 11:30 AM, 12:00 PM, 12:30 PM, 1:00 PM

从上午 0:00 开始,到晚上 11:30 结束

<select id='time'>
  <option value="11:30 AM">11:30 AM</option>
  <option value="12:00 PM">12:00 PM</option>
  <option value="12:30 PM">12:30 PM</option>
  <option value="1:00 PM">1:00 PM</option>
 <option value="1:30 PM">1:30 PM</option>
 <option value="2:00 PM">2:00 PM</option>
 <option value="2:30 PM">2:30 PM</option>
 <option value="3:00 PM">3:00 PM</option>
 <option value="3:30 PM">3:30 PM</option>
 <option value="4:00 PM">4:00 PM</option>
 <option value="4:30 PM">4:30 PM</option>
</select>

$(document).ready(function(){

  $('#time').val(.now()); // this wouldnt work it gives the current time which may be between 30 min 

});

我希望此选择下拉菜单默认为根据当前时间四舍五入到最近的较高时间。

例如。如果当前时间为上午 10:46,则所选值应为上午 11:00,如果当前时间为上午 10:31,则还应默认为上午 11:00。

有关使用 jquery 或普通 javascript 实现此目的的任何指针。

谢谢

4

2 回答 2

2

您可以使用该Math.round函数将值获取到最接近的半小时:

Math.round(Date.now()/(30*60*1000))*(30*60*1000));

从中构造一个日期对象并获取时间。

var date = new Date(Math.round(Date.now() / (30 * 60 * 1000)) * (30 * 60 * 1000));
$('#time').val(date.getHours()%12 + ":" + ("0"+date.getMinutes()).slice(-2) + " " + (date.getHours() >= 12 ? "PM" : "AM"));

这是一个演示:http: //jsfiddle.net/GsR6v/9/

于 2012-11-29T08:28:38.573 回答
1

您可以尝试对 Date 的值进行四舍五入,如下所示:

var date = new Date(Math.round(Date.now()/(30*60*1000))*(30*60*1000));

然后使用它来设置日期:

$("select option").filter(function() {
  //may want to use $.trim in here
  return $(this).text() == <YourDate>; 
}).attr('selected', true);​

在我的小提琴上试试这个:http: //jsfiddle.net/mC869/

于 2012-11-29T08:42:09.757 回答