如何在Javascript中确定是白天还是晚上?

如何在Javascript中确定是白天还是晚上?,javascript,jquery,datetime,Javascript,Jquery,Datetime,我想应用不同的CSS表到我的网站取决于浏览器的时间。e、 g如果是白天,则显示day.css或night.css作为夜间 我可以用PHP实现这一点,但它基于服务器时间,而不是浏览器本地时间 有没有办法用javascript来告诉时间?我可能会使用jQuery来简单地启动css,一旦它成功了 var hr = (new Date()).getHours(); //get hours of the day in 24Hr format (0-23) 根据你对白天/黑夜的定义,表演你的魔术:) 注:

我想应用不同的CSS表到我的网站取决于浏览器的时间。e、 g如果是白天,则显示day.css或night.css作为夜间

我可以用PHP实现这一点,但它基于服务器时间,而不是浏览器本地时间

有没有办法用javascript来告诉时间?我可能会使用jQuery来简单地启动css,一旦它成功了

var hr = (new Date()).getHours(); //get hours of the day in 24Hr format (0-23)
根据你对白天/黑夜的定义,表演你的魔术:)

注:如果您的白天/夜晚不是在准确的时间开始,您可以尝试
getMinutes()

将获取客户端的本地时间(0-23)。基于该值,交换页面的样式表。我会将day样式表设置为默认值,并在必要时将其替换掉

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

我使用以下逻辑:

const hours = new Date().getHours()
const isDayTime = hours > 6 && hours < 20
const hours=new Date().getHours()
常数isDayTime=小时数>6小时和小时数<20小时

要使此功能发挥作用,您需要知道客户的位置、当地日出和日落时间以及一年中的哪一天。只有赤道地区全年都有几乎恒定的12小时日照

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


有趣的问题。我想尝试一下,想出一些与目前提议完全不同的东西。这就是我得到的:

函数isDay(){
返回(Date.now()+60000*new Date().getTimezoneOffset()+2160000)%86400000/3600000>12;
}
如果在上午6点到下午6点之间,则返回true,否则返回false

分解成若干部分:

  • Date.now()
    以毫秒为单位返回UTC历元
  • newdate().getTimezoneOffset()
    以分钟为单位获取本地时区,
    60000
    仅将其转换为毫秒
  • 2160000表示以毫秒为单位的6小时。这是一种假装每天早上6点开始的恶作剧(将在最后解释)
  • 86400000是一天中有多少毫秒,因此
    X%86400000
    将返回自当前一天开始以来经过的毫秒数;因为我们在上一步增加了6小时,这实际上是从早上6点开始计算毫秒数
  • 我们将结果除以3600000(一小时内的毫秒数),以了解从一天开始到现在已经过去了多少小时
  • 因为我们的时钟增加了6个小时,所以上午6点现在是下午12点,下午6点实际上是午夜。这就是函数检查值是否大于12的原因;如果是,现在必须是上午6点到下午6点之间。根据这个公式,任何早于上午6点或晚于下午6点的时间都会小于12点
当然,也可以通过以下方式实现:

函数isDay(){
常数小时=(新日期()).getHours();
返回时间(小时数>=6和小时数<18);
}

但这还不够有趣:-D

您不需要使用javascript来完成此任务。只要上楼打开窗帘。你仍然可以根据本地时间用PHP来做。。。。但你必须使用某种IP到位置服务,这不是完全可靠的。这是一个很好的问题,可能是一个很好的功能,但这可能会失控。我以前用过电脑,时间设置不正确(比如时间过得太远)。Vista就是这样一个例子:在与互联网时钟同步后,它又恢复了。因此,在某些情况下,您可能会错误地解释数据。嗯,可能有数据不正确的情况。如果这更多的是关于主题,而您并不真正关心它在某些情况下是否是错误的,那么当然可以继续,但否则,您可能不希望这样做。我不知道我会怎么做。祝你好运哈哈@Mark:)谢谢@Maxim。非常好的事情要考虑。我认为考虑到php在服务器上的作用,我们会吸引全世界的访问者,我认为主题会经常显示正确的白天或夜晚。这真的只是一个新奇的插件。干杯这就是为什么软件很难维护的原因之一。这只是一个练习,请不要太认真。我得说它是模糊的,不是过度设计的。我真诚地希望您不要在生产中运行类似代码的公司工作:-)
const hours = new Date().getHours()
const isDayTime = hours > 6 && hours < 20