我目前有以下脚本:
<script>
if(new Date().getHours() > 17 || (new Date().getHours() == 17 &&
new Date().getMinutes()== 0 && new Date().getSeconds() == 0) &&
(new Date().getHours() < 21 && new Date().getMinutes() < 30
&& new Date().getSeconds() == 0)){
//do nothing.
} else {
$(document).ready(function() {
$(".inline").colorbox({inline:true, open:true, width:"50%"});
});
}
基本上,if中的内容是什么: 如果时间是17:00到21:30,则什么也不做,否则显示方框。但是发生的事情是盒子在18:00左右停止工作并再次在午夜开始工作..有人看到这里有什么不对吗?
答案 0 :(得分:1)
$(document).ready(function()
{
var now = new Date(),
block = $('div');
if(now.getHours() >= 17 && (now.getHours() < 21 || (now.getHours() == 21 && now.getMinutes() <= 30)))
{
block.text('17:00 - 21:30');
//do nothing.
}
else
{
block.text('not 17:00 - 21:30');
//$(".inline").colorbox({inline:true, open:true, width:"50%"});
}
});
答案 1 :(得分:1)
请注意,Date(包括Hour)中的许多字段都是0索引的。这就是为什么你会在18:00左右观察这个停止工作的原因。
我建议使用变量使条件更简单。尝试这样的事情。如果你担心命名空间污染,请在它周围抛出一个封闭物。
var now = new Date();
var startQuietPeriod = new Date();
startQuietPeriod.setHours(16); startQuietPeriod.setMinutes(0); startQuietPeriod.setSeconds(0); startQuietPeriod.setMilliseconds(0); // Today at 17:00
var endQuietPeriod = new Date();
endQuietPeriod.setHours(20); endQuietPeriod.setMinutes(30); endQuietPeriod.setSeconds(0); endQuietPeriod.setMilliseconds(0); // Today at 21:30
if (startQuietPeriod < now && now < endQuietPeriod) {
// don't show prompt
} else {
// show prompt
}
答案 2 :(得分:1)
以下是我写这个的方法:
var now = new Date();
if (now.getHours() >= 17 && now.getHours() <= 21) {
if (now.getHours() == 21 && now.getMinutes() > 30) {
return;
}
}
// Do your document.ready stuff here
首先,我确实将当前时间保存到变量中,这使我能够输入更少的内容(记住:是一个懒惰的打字员!)。此外,这也可以清除您的状况,因此更容易发现任何逻辑错误。
其次,我将你的情况(在17:00和21:30之间什么都不做)分成2个独立的if条件。就我个人而言,我更喜欢这种方式,因为即使你在2年后回到你的代码中也是如此 您的代码只有可读性。永远记住这一点。复杂的if条件,即使评论很好,也会让你和其他人在将来变得困难。忽略那些称你为菜鸟的人。
此外,我发现使用return
更具可读性,如果条件匹配,它只会中止当前函数/ <script>
。这可以为您节省1个缩进级别: - )
更新:您还应该阅读peakxu's answer(以及MDN page for Date)。请注意,正如peakxu所说,所有这些都是0索引。
答案 3 :(得分:0)
var d = new Date();
if ( d.getHours() < 17 ||
d.getHours() > 21 ||
(d.getHours() == 21 && d.getMinutes() >= 30)) {
$(document).ready(function() {
$(".inline").colorbox({inline:true, open:true, width:"50%"});
});
}