1

当聊天可用时,我想在我们的网站上显示。问题是它不会在周末开放。我如何排除它们?可以做到吗?

<html>
<body>
<script type="text/javascript">
function chatonoff(){
var now = new Date();
var hour = now.getHours();

if (hour >=9 && hour <=18)
{
document.getElementById("chat").src = "/bilder/butik/chat-open.png";
}
}
</script>
<img id="chat" src="/bilder/butik/chat.png" onload="chatonoff()">

</body>
</html>
4

2 回答 2

2

你可以这样做

function chatonoff(){
    var now = new Date();
    var hour = now.getHours();
    var day = now.getDay();

    //Check if weekend : in this case, I assume that saturday == 6 and Sunday = 0
    //It depends on your location / timezone
    if(day != 6 && day != 0)
    {
        if (hour >=9 && hour <=18)
        {
            document.getElementById("chat").src = "/bilder/butik/chat-open.png";
        }
    }
}

编辑

关于排除节假日:

您应该创建一个包含所有关闭日期的数组。然后,检查当前日期是否存在于数组中

  var offDaysListArray = ['2013-01-01','2013-01-02'];

  var now = new Date();
  var y = now .getFullYear();
  var d = (now .getDate() < 10) ? '0'+now .getDate() : now .getDate();
  var m = ((now .getMonth()+1) < 10) ? '0'+(now .getMonth()+1) : (now .getMonth()+1);

  //Check if it is a closed day
  if(offDaysListArray.indexOf(y + '-' + m + '-' + d) != -1)    
      return false; //It is a close day

注意indexOf,像IE8这样的旧浏览器没有实现这个功能。检查为什么 indexOf 在数组 IE8 上不起作用?

于 2013-01-11T07:28:25.017 回答
2

这是一个非常简单的答案,尽管由于 JavaScript 在客户端运行,它不会完全按照您的意愿工作。

这意味着世界另一端的人将能够在他的星期五看到你的聊天,即使它是你的星期六(星期天/星期一的例子也适用于此)。理想情况下,您可以使用一些服务器端语言(例如 Java/.NET/PHP 或您正在使用的任何语言)来解决这个问题。

这是您的快速 JavaScript 修复:

    <html>
    <body>
        <script type="text/javascript">
        function chatonoff(){
            var now = new Date();
            var hour = now.getHours();
            var day = now.getDay();
            if (hour >=9 && hour <=18 && day >= 1 && day <= 5)
            {
                document.getElementById("chat").src = "/bilder/butik/chat-open.png";
            }
        }
        </script>
        <img id="chat" src="/bilder/butik/chat.png" onload="chatonoff()">
    </body>
    </html>
于 2013-01-11T07:29:54.840 回答