如何在javascript或jquery中确定它是白天还是晚上?

时间:2010-02-12 06:26:22

标签: javascript jquery

我想根据浏览器的时间将不同的CSS表格应用到我的网站。例如,如果是白天的时间,则显示day.css或night.css for night。

我可以使用PHP执行此操作,但它基于服务器时间,而不是浏览器本地时间。

有没有办法在javascript中告诉时间?我可能会使用jQuery简单地在css完成后启动它。

5 个答案:

答案 0 :(得分:23)

var hr = (new Date()).getHours(); //get hours of the day in 24Hr format (0-23)

根据您对日/夜的定义,执行您的魔法:)

PS:如果您的日/夜不是在确切时间开始,您可以尝试getMinutes()

答案 1 :(得分:3)

我使用这个逻辑:

const hours = new Date().getHours()
const isDayTime = hours > 6 && hours < 20

答案 2 :(得分:2)

(new Date).getHours()

将获取客户端的当地时间(0-23)。根据该值,交换页面的样式表。我会将日期样式表设置为默认值,并在必要时将其换出。

我最初的想法是,您希望在客户端上尽快执行此操作,以避免任何potential browser reflow

答案 3 :(得分:0)

要执行此操作,您需要知道客户的位置,当地的日出和日落时间以及一年中的某一天。全年只有赤道位置的日照时间几乎恒定为12小时。

StackOverflow上的另一个答案提供了一个很好的答案:

Calculating sunrise/sunset times in Javascript

答案 4 :(得分:0)

有趣的问题。我想尝试一下,并提出与迄今为止建议的完全不同的东西。这就是我得到的:

function isDay() {
    return (Date.now() + 60000 * new Date().getTimezoneOffset() + 21600000) % 86400000 / 3600000 > 12;
}

如果在上午6点到下午6点之间返回true,否则返回false。

分为几部分:

  • Date.now()以毫秒为单位返回UTC时期;
  • new Date().getTimezoneOffset()以分钟为单位获取本地时区,而60000则将其转换为毫秒;
  • 21600000表示6个小时(以毫秒为单位)。这是一种假装,每天假装从早上6点开始(将在最后说明);
  • 86400000是一天中有多少毫秒,因此X % 86400000将返回自当天开始以来已过去的毫秒数;由于我们在上一步中增加了6个小时,因此实际上是从6 AM开始计算毫秒数。
  • 我们将结果除以3600000(每小时的毫秒数),以找出自开始一天以来已经经过了几个小时;
  • 由于我们将时钟增加了6个小时,所以现在上午6点现在是中午12点,实际上下午6点是午夜。这就是函数检查值是否大于12的原因。如果是的话,那么现在必须在6 AM到6 PM之间。根据该公式,早于6 AM或晚于6 PM的值将小于12。

当然,可以通过以下方式实现同​​样的目标:

function isDay() {
  const hours = (new Date()).getHours();
  return (hours >= 6 && hours < 18);
}

但是,这甚至还不及一半:-D