【问题标题】:PHP date_sunrise and date_sun_info giving different resultsPHP date_sunrise 和 date_sun_info 给出不同的结果
【发布时间】:2017-01-11 13:02:31
【问题描述】:

我有一个网络摄像头网站,我想显示当天的日出时间。为此,我在 PHP 中使用了 date_sunrise 函数。除了坐标之外,它还以太阳的天顶值作为输入。

我了解到日出的正确天顶是 90.8333。 90 度将是与太阳中心(即在地平线处)的理论角度。为了考虑太阳的直径和折射,增加了 0.8333(16 弧分 + 34 弧分除以 60)。

但我注意到此输入给出的日出时间与其他站点不同。最可靠的来源必须是美国海军天文台的天文应用部。查看他们的online calculator 并阅读the description of their method。据说他们还使用天顶值 90.8333 来计算日出。

然后我发现 php 函数 date_sun_info,它是一个包含各种数据的数组,给出了正确的日出时间(对应于 AAD 的结果)。

要通过 date_sunrise 函数实现相同的日出时间,我必须输入一个 90.5 左右的天顶值。

为什么 zenith=90.8333 的 date_sunrise 不给出与 date_sun_info 相同的结果?

【问题讨论】:

  • PHP 的默认值是90.583333 - 你试过吗?也许计算的基础不同。
  • 请发布您用于date_sunrisedate_sun_info 的代码,以及所有输入,包括纬度、经度、天顶、时间和UTC 偏移量。

标签: php date-sunrise


【解决方案1】:

根据http://php.net/manual/en/function.date-sunrise.php,默认的 Zenith 参数取自配置文件(参见 ini_get())

有问题的 .ini 是您的 PHP 安装中的 php.ini。它具有以下几行(它们在此处被注释掉,但除非在 .ini 文件中被覆盖,否则将用作默认值)。

; http://php.net/date.sunrise-zenith
;date.sunrise_zenith = 90.583333

; http://php.net/date.sunset-zenith
;date.sunset_zenith = 90.583333

因此,如果您导航到 php.ini 文件并删除分号,您可以将默认的日出/设置天顶值覆盖为您想要的任何值。在你的情况下,'90.8333'。

关于差异,“sun_info”采用时间、经度和纬度坐标的参数。所以这可以在某个地方有一个更准确的数据库,而不是使用配置中设置的默认值。

参考资料:

【讨论】:

  • 谢谢,90.5833 的天顶给出了相同的结果。请参阅此测试页面:link 我想知道为什么 PHP zenith=90.5833 与 zenith=90.8333 的其他站点给出相同的结果。
  • 嗯......当然是一个有趣的观点。可能值得在专门讨论 PHP 或其他东西的论坛上提出。
【解决方案2】:

为什么 zenith=90.8333 的 date_sunrise 不给出与 date_sun_info 相同的结果?

好问题。让我们去源头。 date_sunrise calculates the altitude 作为天顶的函数:

altitude = 90 - zenith;

date_sun_info calculates altitude 作为常量:

-35.0/60

高度是什么意思,改变这个值对结果有何影响?嗯,cross reference to timelib_astro_rise_set_altitude,也就是库调用date_sunrisedate_sun_info都用,我们看到了:

 *       altit = the altitude which the Sun should cross
 *               Set to -35/60 degrees for rise/set, -6 degrees
 *               for civil, -12 degrees for nautical and -18
 *               degrees for astronomical twilight.

现在扫描该代码并注意它只是Generalized Sunrise Equation,常数-35.0/60 对应于太阳圆盘的中心(-0.83°,或大约-50 弧分)。所以这里使用常数是有道理的,因为它是 USNO AAD 使用的广义方程的一部分。

现在的问题是,为什么date_sunrise 将高度计算为天顶的函数?让我们注意两件事。首先,如果我们提供一个顶点 90.583333,那么计算 90 - 90.583333 会产生与我们之前看到的完全相同的常量 -35/60 == -.583333,这解释了为什么使用该特定值会得到相同的结果。其次,90 - zenithsolar elevation angle 也是horizontal parallax。把这些笔记放在一起,我猜减法比常数更准确地解释了地球的扁球体形状。但是,我不清楚广义方程是否可以容忍这一点。

因此,我建议在需要与其他来源保持一致的计算中使用 date_sun_info

【讨论】:

    【解决方案3】:

    然而,在暮光之城方面也存在差异,我看不出两者之间的源代码有任何显着差异。黄昏被定义为太阳几何中心在地平线下6/12/18度经过的时刻,因此不应该考虑太阳圆盘。 sun_info 和sunrise 都使用-6.0 作为海拔高度,但结果略有不同。

    【讨论】:

      【解决方案4】:

      仅供未来读者注意,在 PHP 8.1 之后 date_sunrise() 和 date_sunset() 将被淘汰

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-04-13
        • 2021-06-06
        • 1970-01-01
        • 2012-07-12
        • 2021-09-25
        • 2023-03-30
        • 1970-01-01
        • 2011-04-03
        相关资源
        最近更新 更多