以12小时格式显示时间

时间:2020-04-06 12:14:58

标签: javascript html

嗨,下面的代码给了我当前时间,但是以24ht格式显示,但是我想以12 hr格式显示时间,下面是我正在使用的代码。 请提出我该怎么办? 我已经尝试了许多代码,但无法执行。

                <div id="timedate">
                    <a id="mon">January</a>
                    <a id="d">1</a>,
                    <a id="y">0</a><br />
                    <a id="h">12</a>:
                    <a id="m">00</a>:
                    <a id="s">00</a>
                    <a id="mi">000</a>
                  </div>

                <script>
                // START CLOCK SCRIPT

                Number.prototype.pad = function(n) {
                  for (var r = this.toString(); r.length < n; r = 0 + r);
                  return r;
                };

                function updateClock() {
                  var now = new Date();
                  var milli = now.getMilliseconds(),
                    sec = now.getSeconds(),
                    min = now.getMinutes(),
                    hou = now.getHours(),
                    mo = now.getMonth(),
                    dy = now.getDate(),
                    yr = now.getFullYear();
                  var months = ["January", "February", "March", "April", 
                                "May", "June", "July", "August", "September", 
                                "October", "November", "December"];
                  var tags = ["mon", "d", "y", "h", "m", "s", "mi"],
                    corr = [months[mo], dy, yr, hou.pad(2), min.pad(2), sec.pad(2), milli];
                  for (var i = 0; i < tags.length; i++)
                    document.getElementById(tags[i]).firstChild.nodeValue = corr[i];
                }

                    if (hou == 0) {
                            hou = 12;
                        }

                        if (hou > 12) {
                            hou = h - 12; }

                function initClock() {
                  updateClock();
                  window.setInterval("updateClock()", 100);
                }

                // END CLOCK SCRIPT
            </script>

1 个答案:

答案 0 :(得分:2)

您太晚覆盖hou的值了:当到达代码的那一部分时,您已经通过了for循环,将值写入DOM。只需将其向上移动即可解决问题:

// Overwrite hou if necessary
if (hou == 0) {
    hou = 12;
} else if (hou > 12) {
    hou -= 12;
}

// When done, write everything to DOM
var tags = ["mon", "d", "y", "h", "m", "s", "mi"],
    corr = [months[mo], dy, yr, hou.pad(2), min.pad(2), sec.pad(2), milli];
    for (var i = 0; i < tags.length; i++)
    document.getElementById(tags[i]).firstChild.nodeValue = corr[i];
}

OP要求实施am / pm检测。这就像简单地检查hou是<12还是> = 12,然后再覆盖它一样简单:

// Determine if it's ante/post-meridiem (am/pm)
var meridiem = hou < 12 ? 'am' : 'pm';
// Then write it to an element somewhere...

if (hou == 0) {
    hou = 12;
} else if (hou > 12) {
    hou -= 12;
}

请参阅概念证明:

Number.prototype.pad = function(n) {
  for (var r = this.toString(); r.length < n; r = 0 + r);
  return r;
};

function updateClock() {
  var now = new Date();
  var milli = now.getMilliseconds(),
    sec = now.getSeconds(),
    min = now.getMinutes(),
    hou = now.getHours(),
    mo = now.getMonth(),
    dy = now.getDate(),
    yr = now.getFullYear();
  var months = ["January", "February", "March", "April",
    "May", "June", "July", "August", "September",
    "October", "November", "December"
  ];
  
  document.getElementById('meridiem').innerText = hou < 12 ? 'am' : 'pm';

  if (hou == 0) {
    hou = 12;
  } else if (hou > 12) {
    hou -= 12;
  }

  var tags = ["mon", "d", "y", "h", "m", "s", "mi"],
    corr = [months[mo], dy, yr, hou.pad(2), min.pad(2), sec.pad(2), milli];
  for (var i = 0; i < tags.length; i++)
    document.getElementById(tags[i]).firstChild.nodeValue = corr[i];
}

function initClock() {
  updateClock();
  window.setInterval("updateClock()", 100);
}

initClock();
<div id="timedate">
  <span id="mon">January</span>
  <span id="d">1</span>,
  <span id="y">0</span><br />
  <span id="h">12</span>:
  <span id="m">00</span>:
  <span id="s">00</span>
  <span id="mi">000</span>
  <span id="meridiem">am</span>
</div>