为什么 date.getHours()%12 以 1-12 格式给你时间?

Why does date.getHours()%12 give you the time in 1-12 format?

我不明白为什么 const hours = (date.getHours() + 11) % 12 +1; 以 1-12 格式返回小时数?我将这段代码复制并粘贴到我的程序中,但没有任何解释。任何解释这方面的帮助都会很有帮助,谢谢。

这是我目前所拥有的...

const clockContainer = document.querySelector('.js-clock'),
  clockTitle = clockContainer.querySelector('h1');

function getTime() {
  const date = new Date(); //instantiate Date objet and set it to a constant variable
  const seconds = date.getSeconds(); // Gets the date objects seconds value into a const
  const minutes = date.getMinutes();
  const hours = (date.getHours() + 11) % 12 +1;
  // Ternary operator (conditional statement ? "if code block" : "else code block")
  clockTitle.innerText = `${hours < 10 ? `0${hours}` : hours}:${minutes < 10 ? `0${minutes}` : minutes}:${seconds < 10 ? `0${seconds}` : seconds}`;
}

// initialize application
function init() {
  getTime();
  setInterval(getTime, 1000); // runs getTime function every second to make the clock run
}

// call initialize function
init();

Modulus operator returns 一个除法的余数。在这种情况下,回想一下在你学习小数位之前的小学,并且会简单地通过计数进行除法,"how many times will a go into b?",并且剩下一个你会忘记的余数。

例如,5 进入 10 两次,所以 10 除以 5 等于 2。同样,5 进入 12 两次,但不是一直...你剩下 2。所以, 12除以5得2余2.故12%5得2.

你可以把模运算(n % m)想成是在问,"how high over the closest multiple of m is n?"这就是我喜欢在自己的大脑中理解它的方式。


所以,当您遇到 18 % 12 之类的问题时,您是在问 "how many times will 12 go into 18?" 回答一次,但您不是在那之后……您在剩下的之后。在这种情况下,6。

  • "How high over the closest multiple of 12 is 18?"
  • 最接近 12 的倍数是 12(因为次高的是 24),18 是 12 的 6。

考虑通读 that Wikipedia page I linked