【问题标题】:Show Element depending on Hour of a day根据一天中的时间显示元素
【发布时间】:2021-10-03 22:53:04
【问题描述】:

如何根据当前时间显示/隐藏元素?

  • 从 12:00 到 14:00 显示第一个 SPAN(隐藏其他 Span)
  • 从 17:00 到 03:00 显示第二个 SPAN(隐藏其他 Span)
  • 从 07:00 到 10:00 显示第三个 SPAN(隐藏其他 Span)

尝试

var pagi = new Date();   // morning
var siang = new Date();  // day
var malam = new Date();  // night
var time = new Date().getTime();

if (time > pagi.setHours(12, 00)) && time < end.setHours(14, 00)) {
  document.getElementById("malam").style.display = "block";
  document.getElementById("pagi").style.display = "none";
  document.getElementById("siang").style.display = "none";
} else if (time > siang.setHours(17, 00) && time < end.setHours(03, 00))) {
  document.getElementById("malam").style.display = "none";
  document.getElementById("pagi").style.display = "block";
  document.getElementById("siang").style.display = "none";
} else if (time > malam.setHours(07, 00)) && time < end.setHours(10, 00)) {
  document.getElementById("malam").style.display = "none";
  document.getElementById("pagi").style.display = "none";
  document.getElementById("siang").style.display = "block";
}
<span id="malam" style="background-color:magenta;"> malam </span>
<br/>
<span id="pagi" style="background-color:cyan;"> pagi </span>
<br/>
<span id="siang" style="background-color:orange;"> siang </span>

【问题讨论】:

  • 可以使用setTimeout

标签: javascript html css time show-hide


【解决方案1】:

您可以使用getHours() 获取本地时间,然后使用条件语句相应地显示元素。

let malam = document.getElementById("malam"), 
    pagi = document.getElementById("pagi"),
    siang = document.getElementById("siang"), 
    today, h;

function show(){

  today = new Date(),h = today.getHours();
  
  if(h >= 3){
      if(h>=7 && h<10){
        malam.style.display = 'none';
        pagi.style.display = 'none';
        siang.style.display = 'block';
      }
      else if(h>= 12 && h<14){
        malam.style.display = 'block';
        pagi.style.display = 'none';
        siang.style.display = 'none';
      }
      else if(h>=17){
        malam.style.display = 'none';
        pagi.style.display = 'block';
        siang.style.display = 'none';
      }    
  }else{
      malam.style.display = 'none';
      pagi.style.display = 'block';
      siang.style.display = 'none';
  }
}
<p id="malam" style="background-color:magenta; display:none"> malam </p>
<p id="pagi" style="background-color:cyan; display:none"> pagi </p>
<p id="siang" style="background-color:orange; display:none"> siang </p>

<button onclick='show()'>test</button>

注意:使用内联事件处理不是最佳实践,如果您想改进此代码使用object.onclick = function(){myScript};您可以阅读更多here

【讨论】:

  • @fauzanrozaq 记得检查答案;)
  • (Offtopic) @Gass 有趣的是,回答者经常提醒问题作者“复选标记”他们的答案,但不知何故,同样的问题并不支持展示研究、努力和重现问题的最少代码。
  • 鉴于您没有解释您的代码以便向 OP 教授任何关于 why如何 的内容,这可能对您有用还引入了一个不在原始代码中的按钮,它需要交互(没有解释为什么它在那里,或者为什么需要它),并且您使用了内联事件处理,这本身就是不好的做法。当然,这纯粹是我的观点,您可以根据自己的意愿更新/解释(或不解释),但我不确定您为什么认为这个答案(如书面形式)值得被接受为最佳解决方案。
【解决方案2】:

您可以使用一个对象数组并提取与数组索引匹配的对象0, 1, 2, 3 给定一天中的当前时间。并大大简化您的 HTML:

const h = new Date().getHours();
const dp = [
  {text: "morning", bg: "cyan"},      // From 07 to 10
  {text: "day",     bg: "orange"},    // From 12 to 14
  {text: "night",   bg: "magenta"},   // From 17 to 03
  {text: "",        bg: "none"},      // All other hours
][
  h >=  7 && h < 10 ? 0 :
  h >= 12 && h < 14 ? 1 :
  h >= 17 && h <  3 ? 2 :
                      3
];

const EL_dayPeriod = document.querySelector("#dayPeriod");
EL_dayPeriod.textContent      = dp.text; 
EL_dayPeriod.style.background = dp.bg;
&lt;span id="dayPeriod"&gt;&lt;/span&gt;

【讨论】:

  • 我确实喜欢这个答案,除了可怕的嵌套三元;尽管如此,请投赞成票!
  • @david 谢谢! PS:只是为Conditional (ternary) Operator 辩护:D 我不会(主观地说)称它那么可怕 :) 我认为它可以说实际上相当不错。至少与 jsfiddle.net/xravtc6k 相比,并且给定的三元运算符是基本的 CS101。
【解决方案3】:

您在 pagi、siang 和 malam 使用相同的时间。因此,您可以通过以下方式使用单个变量来完成。

 $(document).ready(function () {
            var pagiT = new Date();
            var time = new Date().getTime();

            if (time > pagiT.setHours(14, 00)) {
                document.getElementById("malam").style.display = "none";
                document.getElementById("pagi").style.display = "block";
                document.getElementById("siang").style.display = "none";
            }
            else if (time < pagiT.setHours(03, 00)) {
                document.getElementById("malam").style.display = "none";
                document.getElementById("pagi").style.display = "block";
                document.getElementById("siang").style.display = "none";
            }
            else  {
                document.getElementById("malam").style.display = "none";
                document.getElementById("pagi").style.display = "none";
                document.getElementById("siang").style.display = "block";
            }


        });

【讨论】:

    【解决方案4】:

    setTimeout() 的简单示例

    var malam = document.getElementById("malam")
      var pagi = document.getElementById("pagi")
      var siang = document.getElementById("siang")
      
     setTimeout(showMalam, 3000);
    
      function showMalam(){
        console.log("showMalam caled at: " +  (new Date()));
        malam.style.display = "block";
        pagi.style.display = "none";
        siang.style.display = "none";
        setTimeout(showPagi, 3000);
      }
      function showPagi(){
        console.log("showPagi caled at: " +  (new Date()));
        malam.style.display = "none";
        pagi.style.display = "block";
        siang.style.display = "none";
        setTimeout(showSiang, 3000);
      }
      function showSiang(){
        console.log("showSiang caled at: " +  (new Date()));
        malam.style.display = "none";
        pagi.style.display = "none";
        siang.style.display = "block";
       }
    <span id="malam" style="background-color:magenta;"> malam </span>
    <br/>
    <span id="pagi" style="background-color:cyan;display:none"> pagi </span>
    <br/>
    <span id="siang" style="background-color:orange;display:none"> siang </span>

    【讨论】:

    • 我不是那个意思,当时间... -仅显示 12.00 -14.00 id "malam" 显示,其他 id 隐藏。 -仅显示 17.00 - 03.00 id "pagi" 显示,其他 id 隐藏。 -show 07.00 - 10.00 span "siang" show,其他 id 隐藏。
    • 你可以玩弄当前时间,然后看看我们什么时候超时,例如现在是 9 并且设置超时可能是从现在起 2 小时
    猜你喜欢
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    • 1970-01-01
    • 1970-01-01
    • 2010-11-20
    • 2020-08-03
    相关资源
    最近更新 更多