关于这个功能我有两件事我不明白:
1.使用格式SUNFUNCS_RET_TIMESTAMP时不考虑偏差.例如,如果我使用格式SUNFUNCS_RET_STRING并使用此代码:
$lat = 46.055556; // Latitude (Ljubljana).
$long = 14.508333; // Longitude (Ljubljana).
$offset = 2; // Difference between GMT and local time in hours.
$zenith = 90 + 50 / 60;
echo "<br><p>Sunrise: " . date_sunrise(time(), SUNFUNCS_RET_STRING, $lat, $long, $zenith, $offset);
echo "<br>Sunset: " . date_sunset(time(), SUNFUNCS_RET_STRING, $lat, $long, $zenith, $offset);
Run Code Online (Sandbox Code Playgroud)
然后它将显示某种正确的answear(我的意思在某种程度上将在第二点解释):
日出:5:15日落:20:42
现在,如果我使用SUNFUNCS_RET_TIMESTAMP并将其转换为具有函数date()的日期的字符串表示形式:
$lat = 46.055556; // Latitude (Ljubljana).
$long = 14.508333; // Longitude (Ljubljana).
$offset = 2; // Difference between GMT and local time in hours.
$zenith = 90 + 50 / 60;
$dateSunRise = date_sunrise(time(), SUNFUNCS_RET_TIMESTAMP, $lat, $long, $zenith, $offset);
$dateSunSet = date_sunset(time(), SUNFUNCS_RET_TIMESTAMP, $lat, $long, $zenith, $offset);
echo "<br><p>Sunrise: " . date("H:i", $dateSunRise);
echo "<br><p>Sunrise: " . date("H:i", $dateSunSet);
Run Code Online (Sandbox Code Playgroud)
我得到这个结果:
日出:03:15日出:18:42
我检查了时间戳并确实返回错误,这就是我不理解的原因,因为我使用了与前一个示例中相同的偏移量,我使用了SUNFUNCS_RET_STRING.
2.在第一点我写过,它显示出某种正确的装束,这里是我的意思的解释.我们的官方气象机构ARSO每天在其页面上更新有关日出和日落的信息.该页面可以在此链接上找到(抱歉,因为它不是英文版).底线是,对于我们的首都(卢布尔雅那),它有这样的信息:
日出:5:18日出:20:41
我使用date_sunrise和date_sunset函数得到了这个:
日出:5:15日落:20:42
参数与第一点(纬度,经度,偏移,天顶)相同.现在纬度和经度肯定是正确的(用GeoHack检查卢布尔雅那).我开始认为这种差异来自zenith参数.但我在互联网上搜索过,它说:
对于真正的日出/日落,天顶的最佳总体数字是90+(50/60)度
我不知道为什么会出现这种差异,这两个函数可能会返回错误的结果吗?
使用时间戳时,它们几乎总是UNIX时间戳,这意味着它们以UTC格式给出.使用它们时,您必须在计算结束时将它们转换为您自己的时区.出于您的目的,您可能只需要SUNFUNCS_RET_STRING.
对于第二点,天顶在计算日出和日落的确切分钟方面发挥了重要作用.这90+(50/60)只是一个大概的估计.网上有计算器可以为你的坐标提供更好的数字,它们对于日出和日落都会有所不同.
以下代码将为您提供您在卢布尔雅那寻找的数字:
$lat = 46.055556; // Latitude (Ljubljana).
$long = 14.508333; // Longitude (Ljubljana).
$offset = 2; // Difference between GMT and local time in hours.
$rise_zenith = 90+(25/60);
$set_zenith = 90+(40/60);
echo "<br>Sunrise: " . date_sunrise(time(), SUNFUNCS_RET_STRING, $lat, $long, $rise_zenith, $offset);
echo "<br>Sunset: " . date_sunset(time(), SUNFUNCS_RET_STRING, $lat, $long, $set_zenith, $offset);
Run Code Online (Sandbox Code Playgroud)