我有一个网络摄像头网站,我想显示实际一天的日出时间。所以我在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左右的天顶值。
为什么date_sunrise与zenith = 90.8333不能给出与date_sun_info相同的结果?
答案 0 :(得分:4)
根据http://php.net/manual/en/function.date-sunrise.php,默认的Zenith参数取自配置文件(参见ini_get())
有问题的.ini是PHP安装中的php.ini。它有以下几行(它们在这里被注释掉,但除非在.ini文件中被覆盖,否则将被用作默认值)。
import re
s = '''aaa
bbb|30s
ccc|500ms|1s'''
print(re.findall(r'(\w+)\|?(\w+)?\|?(\w+)?', s))
因此,如果您导航到php.ini文件并删除分号,则可以将默认的日出/设置天顶值覆盖为您想要的任何值。在您的情况下,' 90.8333'。
关于差异,' sun_info'采用时间,经度和纬度坐标的论证。因此,这可以在某处使用更准确的数据库,而不是使用配置中设置的默认值。
参考文献:
答案 1 :(得分:3)
为什么date_sunrise与zenith = 90.8333不能给出与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,还有horizontal parallax。把这些笔记放在一起,我猜测减法说明地球的扁球体形状比常数更准确。但是,我不清楚广义方程是否容忍这一点。
因此,我建议您使用date_sun_info
进行需要与其他来源保持一致的计算。
答案 2 :(得分:0)
但是,暮光之城也有所不同,我看不到两者之间的源代码有任何显着差异。暮光定义为太阳的几何中心在地平线下经过6/12/18度的时刻,因此不应考虑太阳盘。 sun_info和Sunrise都使用-6.0作为海拔高度,但是结果略有不同。