Javascript时间比较

时间:2012-09-23 12:13:43

标签: javascript datetime time if-statement

我目前有以下脚本:

<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左右停止工作并再次在午夜开始工作..有人看到这里有什么不对吗?

4 个答案:

答案 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%"});
    }
}); 

演示:http://jsfiddle.net/FwtRb/10/

答案 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%"});
        });
}