javascript 的白天或夜晚时间

daylight or night time with javascript

我想要一个基于客户时区是白天还是晚上的不同 UI 的网站。现在我根据在互联网上找到的内容获得了这段代码:

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

if (isDayTime === True){
    //do this...
}

但问题是每个时区的日出和日落都不同,而且它会随着季节而变化,所以将 6 到 20 视为我的白天时间是错误的(因为在冬天可能是晚上 20 点之前)。

有没有办法根据客户端时区获取白天或晚上的时间?

一个特别有趣的问题,答案比我想的要复杂。

首先,恐怕您也忘记了考虑时区本身并不能提供足够的信息来计算白天或黑夜。您还必须将其与纬度参考进行交叉引用,因为白天和黑夜的持续时间会有所不同。

来自 Stack Overflow 上具有类似凭据的另一个答案的有用线索:

A concise description of an algorithm to calculate the sunrise and sunset is provided by the United States Naval Observatory, available here:

http://edwilliams.org/sunrise_sunset_algorithm.htm

In addition to providing the date and location, you also need to select a Zenith angle (at which the sun will be considered to have "risen" or "set") - the page linked has several options.

这仍然需要构建到一个函数中,但如果您在 github 上寻找要点很聪明,您可能会发现一些有用的东西。

这里有一个 sunrise/sunset 计算器:https://gml.noaa.gov/grad/solcalc/sunrise.html

您可以了解将用户位置与时区进行交叉引用的想法,我认为您将有一个更完整的解决方案。