PHP date_sunrise 和 date_sun_info 给出不同的结果
PHP date_sunrise and date_sun_info giving different results
我有一个网络摄像头网站,我想显示当天的日出时间。为此,我在 PHP 中使用了 date_sunrise 函数。除了坐标,它还以太阳天顶值作为输入。
我了解到日出的正确天顶是 90.8333。 90 将是与太阳中心的理论角度(即在 horizon 处)。考虑到太阳的直径和折射,添加 0.8333(16 弧分 + 34 弧分除以 60)。
但我注意到此输入给出的日出时间与其他站点不同。最可靠的消息来源必须是 U.S 的天文应用部门。海军天文台。查看他们的 online calculator and read the description of their method。据说他们还使用天顶值 90.8333 来计算日出。
然后我发现 php 函数 date_sun_info,它是一个包含各种数据的数组,给出了正确的日出时间(对应于 AAD 的结果)。
要从 date_sunrise 函数获得相同的日出时间,我必须输入 90.5 左右的天顶值。
为什么 date_sunrise 与 zenith=90.8333 给出的结果与 date_sun_info 不同?
根据 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 文件并删除分号,您可以将默认的 sunrise/set 天顶值覆盖为您想要的任何值。在你的例子中,'90.8333'。
关于区别,'sun_info'采取时间、经纬度坐标的说法。所以这可能在某处有一个更准确的数据库,而不是使用配置中设置的默认值。
参考文献:
Why doesn't date_sunrise with zenith=90.8333 give the same result as 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_sunrise
和date_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 - zenith
就是solar elevation angle and also the horizontal parallax。将这些笔记放在一起,我猜测减法比常数更准确地解释了地球的扁球体形状。但是,我不清楚广义方程是否可以容忍这一点。
因此,我建议在需要与其他来源保持一致的情况下使用 date_sun_info
进行计算。
然而,当涉及到暮光之城时也存在差异,我看不出两者之间的源代码有任何显着差异。暮光被定义为太阳几何中心在horizon下方6/12/18度处经过的时刻,因此不应考虑太阳圆盘。 sun_info 和 sunrise 都使用 -6.0 作为高度,但结果略有不同。
给未来读者的提示 date_sunrise() 和 date_sunset() 将在 PHP 8.1
之后过时
我有一个网络摄像头网站,我想显示当天的日出时间。为此,我在 PHP 中使用了 date_sunrise 函数。除了坐标,它还以太阳天顶值作为输入。
我了解到日出的正确天顶是 90.8333。 90 将是与太阳中心的理论角度(即在 horizon 处)。考虑到太阳的直径和折射,添加 0.8333(16 弧分 + 34 弧分除以 60)。
但我注意到此输入给出的日出时间与其他站点不同。最可靠的消息来源必须是 U.S 的天文应用部门。海军天文台。查看他们的 online calculator and read the description of their method。据说他们还使用天顶值 90.8333 来计算日出。
然后我发现 php 函数 date_sun_info,它是一个包含各种数据的数组,给出了正确的日出时间(对应于 AAD 的结果)。
要从 date_sunrise 函数获得相同的日出时间,我必须输入 90.5 左右的天顶值。
为什么 date_sunrise 与 zenith=90.8333 给出的结果与 date_sun_info 不同?
根据 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 文件并删除分号,您可以将默认的 sunrise/set 天顶值覆盖为您想要的任何值。在你的例子中,'90.8333'。
关于区别,'sun_info'采取时间、经纬度坐标的说法。所以这可能在某处有一个更准确的数据库,而不是使用配置中设置的默认值。
参考文献:
Why doesn't date_sunrise with zenith=90.8333 give the same result as 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_sunrise
和date_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 - zenith
就是solar elevation angle and also the horizontal parallax。将这些笔记放在一起,我猜测减法比常数更准确地解释了地球的扁球体形状。但是,我不清楚广义方程是否可以容忍这一点。
因此,我建议在需要与其他来源保持一致的情况下使用 date_sun_info
进行计算。
然而,当涉及到暮光之城时也存在差异,我看不出两者之间的源代码有任何显着差异。暮光被定义为太阳几何中心在horizon下方6/12/18度处经过的时刻,因此不应考虑太阳圆盘。 sun_info 和 sunrise 都使用 -6.0 作为高度,但结果略有不同。
给未来读者的提示 date_sunrise() 和 date_sunset() 将在 PHP 8.1
之后过时