我想在一天内多次隐藏提交按钮。
下面的代码有时有效,有时不起作用。昨天的代码有效,但今天的代码不起作用。我无法理解问题出在哪里。
<script>
window.addEventListener("load", function() {
// Check time and update the button's state every second.
setInterval(updateSubmitButtonState, 1000);
}, false);
function updateSubmitButtonState() {
var timezone = "Asia/Calcutta";
var currentTime = new Date();
var hours = currentTime.getHours();
var minutes = currentTime.getMinutes();
var t =currentTime.getHours() + ":" + currentTime.getMinutes();
if (t >= '10:00' && t <= '10:20' ||
t >= '11:00' && t <= '11:20' ||
t >= '13:00' && t <= '13:20' ||
t >= '15:15' && t <= '15:25' ||
t >= '17:30' && t <= '17:40' ||
t >= '19:00' && t <= '19:10' ||
t >= '20:30' && t <= '20:40' ) {
$("#submit").css("display", "none");
} else {
$("#submit").css("display", "block");
}
}
</script>
<input type="submit" id="submit" name="submit">
您正在检查字符串,我建议您将时间更改为毫秒。
试试这个。
<script>
window.addEventListener("load", function() {
// Check time and update the button's state every second.
setInterval(updateSubmitButtonState, 1000);
}, false);
function convertMilliSec(hr, min){
return (parseInt(hr) * (60000 * 60)) + (parseInt(min) * 60000)
}
function updateSubmitButtonState() {
var timezone = "Asia/Calcutta";
var currentTime = new Date();
var hours = currentTime.getHours();
var minutes = currentTime.getMinutes();
var t = convertMilliSec(currentTime.getHours(), currentTime.getMinutes());
console.log(t);
if (t >= convertMilliSec(10,00) && t <= convertMilliSec(10,20) ||
t >= convertMilliSec(11,00) && t <= convertMilliSec(11,20) ||
t >= convertMilliSec(14,00) && t <= convertMilliSec(14,34) ||
t >= convertMilliSec(13,00) && t <= convertMilliSec(13,20) ||
t >= convertMilliSec(15,00) && t <= convertMilliSec(15,20) ||
t >= convertMilliSec(17,00) && t <= convertMilliSec(17,20) ||
t >= convertMilliSec(19,00) && t <= convertMilliSec(19,20) ||
t >= convertMilliSec(20,00) && t <= convertMilliSec(20,20) ) {
$("#submit").css("display", "none");
} else {
$("#submit").css("display", "block");
}
}
</script>
这是因为您正在转换为字符串,并且它尝试按字典顺序排序。 例如:17:07 将像"17:7"一样转换,因此这将大于"17:30"。我建议使用此功能:
function timeToMinutes(h, m) {
return h * 60 + m;
}
然后你可以像
timeToMinutes(h, m) > timeToMinutes(10, 0) ...
试试此示例代码
function timeToMinutes(h, m) {
return h * 60 + m;
}
var currentTime = new Date();
var mins = timeToMinutes(currentTime.getHours(), currentTime.getMinutes());
alert(mins >= timeToMinutes(19, 20) && mins <= timeToMinutes(19, 30));
您需要
将hours
和minutes
转换为两位数字(零引线(,如下所示:
var hours = currentTime.getHours();
hours = hours > 9 ? hours : '0'+hours.toString();
var minutes = currentTime.getMinutes();
minutes= minutes > 9 ? minutes: '0'+minutes.toString();
var t = hours + ":" + minutes;
或者您需要将它们全部转换为Date
对象:
var t = currentTime.getHours() + ":" + currentTime.getMinutes();
var dObj = new Date('01/01/2017 '+t+':00');
然后在比较时,您也与Date
对象进行比较:
if(dObj >= new Date('01/01/2017 10:00:00') && t <= new Date('01/01/2017 10:20:00') .....
更新:
下面是第二种方法的 JSFiddle:
https://jsfiddle.net/02z5hbo1/2/