我有一个显示为单选按钮的时间列表。我想使用JavaScript来选择最接近用户当前时间的那个。我已经在我的网站上使用jquery(如果这很重要)。另外我还有另一组单选按钮,我希望默认选择“最早可接受时间”+3小时。
<label for="select-choice-etime">Earliest acceptable time:</label>
<select name="select-choice-etime" id="select-choice-etime">
<option value="12:00 AM">12:00 AM</option>
<option value="12:30 AM">12:30 AM</option>
<option value="1:00 AM">1:00 AM</option>
<option value="1:30 AM">1:30 AM</option>
<option value="2:00 AM">2:00 AM</option>
<option value="2:30 AM">2:30 AM</option>
<option value="3:00 AM">3:00 AM</option>
<option value="3:30 AM">3:30 AM</option>
<option value="4:00 AM">4:00 AM</option>
<option value="4:30 AM">4:30 AM</option>
<option value="5:00 AM">5:00 AM</option>
<option value="5:30 AM">5:30 AM</option>
<option value="6:00 AM">6:00 AM</option>
<option value="6:30 AM">6:30 AM</option>
<option value="7:00 AM">7:00 AM</option>
<option value="7:30 AM">7:30 AM</option>
<option value="8:00 AM">8:00 AM</option>
<option value="8:30 AM">8:30 AM</option>
<option value="9:00 AM">9:00 AM</option>
<option value="9:30 AM">9:30 AM</option>
<option value="10:00 AM">10:00 AM</option>
<option value="10:30 AM">10:30 AM</option>
<option value="11:00 AM">11:00 AM</option>
<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>
<option value="5:00 PM">5:00 PM</option>
<option value="5:30 PM">5:30 PM</option>
<option value="6:00 PM">6:00 PM</option>
<option value="6:30 PM">6:30 PM</option>
<option selected="selected" value="7:00 PM">7:00 PM</option>
<option value="7:30 PM">7:30 PM</option>
<option value="8:00 PM">8:00 PM</option>
<option value="8:30 PM">8:30 PM</option>
<option value="9:00 PM">9:00 PM</option>
<option value="9:30 PM">9:30 PM</option>
<option value="10:00 PM">10:00 PM</option>
<option value="10:30 PM">10:30 PM</option>
<option value="11:00 PM">11:00 PM</option>
<option value="11:30 PM">11:30 PM</option>
</select>
答案 0 :(得分:7)
假设您要将分钟向上舍入到最近的00/30/60,您可以使用天花板功能:
var now = new Date();
now.setMinutes(Math.ceil(now.getMinutes() / 30) * 30);
// Test cases:
// Math.ceil( 0 / 30) * 30 = 0
// Math.ceil( 1 / 30) * 30 = 30
// Math.ceil(30 / 30) * 30 = 30
// Math.ceil(31 / 30) * 30 = 60
// Math.ceil(59 / 30) * 30 = 60
//
// Note that setMinutes(60) increments the hour and sets the minute equal to zero
var h12h = now.getHours();
var m12h = now.getMinutes();
var ampm;
if (h12h >= 0 && h12h < 12) {
if (h12h === 0) {
h12h = 12; // 0 becomes 12
}
ampm = "AM";
}
else {
if (h12h > 12) {
h12h -= 12; // 13-23 becomes 1-11
}
ampm = "PM";
}
var timeString = h12h + ":" + ("00" + m12h).slice(-2) + " " + ampm;
$("#select-choice-etime").val(timeString);
注意:用圆形替换ceil来映射分钟00 ... 14到00,15 ... 44到30和44 ... 59到60。
<强> Demo here
答案 1 :(得分:6)
这是一个函数,用于将当前时间转换为您选项中使用的表单中最接近的半小时(例如,最近的“10:30 PM”类型时间),然后使用该时间选择正确的选项。< / p>
function getNearestHalfHourTimeString() {
var now = new Date();
var hour = now.getHours();
var minutes = now.getMinutes();
var ampm = "AM";
if (minutes < 15) {
minutes = "00";
} else if (minutes < 45){
minutes = "30";
} else {
minutes = "00";
++hour;
}
if (hour > 23) {
hour = 12;
} else if (hour > 12) {
hour = hour - 12;
ampm = "PM";
} else if (hour == 12) {
ampm = "PM";
} else if (hour == 0) {
hour = 12;
}
return(hour + ":" + minutes + " " + ampm);
}
您可以选择所需的选项:
// remove any previous selection
$('#select-choice-etime option').removeAttr('selected');
// select the one that matches the current time
$('#select-choice-etime option[value="' + getNearestHalfHourTimeString() + '"]').attr('selected', 'selected');
您可以在此处查看:http://jsfiddle.net/jfriend00/Zz7pW/
答案 2 :(得分:1)
有!这将帮助您入门:
var time = new Date(),
hours = time.getHours(),
minutes = (time.getMinutes().length < 2) ? time.getMinutes() : '0' + time.getMinutes();
ampm = 'AM';
if (hours.match(/[13-23]/)) {
ampm = 'PM';
}
// You have to convert 13 to 1, 14 to 2 etc.
答案 3 :(得分:0)
这个基于查询字符串中的GMT时间tz=GM
:
$(document).ready(function() {
$.getJSON("http://json-time.appspot.com/time.json?tz=GMT&callback=?", function(data) {
var GMT3 = data.hour; // data.hour+3 (if you want to use GMT+3
if (data.minute < 15) {
alert("Current Time is: " + GMT3 + " Selected is " + GMT3 + ":00");
}
else if (data.minute < 45) {
alert("Current Time is: " + GMT3 + " Selected is" + GMT3 + ":30");
}
else {
alert("Current Time is: " + GMT3 + " Selected is" + GMT3 + 1 + ":00");
}
})
});
getJSON方法返回:
{
"tz": "GMT",
"hour": 8,
"datetime": "Thu, 01 Mar 2012 08:12:25 +0000",
"second": 25,
"error": false,
"minute": 12
}
答案 4 :(得分:0)
首先,您可以检查此代码。
var now = new Date();
var hour = now.getHours();
var min = now.getMinutes();
var ext = hour > 11 ? 'PM' : 'AM';
var tempRes = $("<select>");
// first we select all PM or AM and append to temp element
$("#select-choice-etime > option[value$='" + ext + "']").appendTo(tempRes);
// and then we select current hour elements within PM or AM
var result = tempRes.find("option[value^='" + hour + "']");
// finally we have two elements in result variable
// for example if hour is 10:12 PM
// result has two items which are 10:00 PM and 10:30 PM
//
// i think you can solve from there