关于this function,我有两件事我不明白:
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);
然后它会以某种方式显示正确的衣服(我的意思在某种程度上会在第二点解释):
日出:05: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);
我得到了这个结果:
日出:03:15 日出:18:42
我检查了时间戳并且肯定会返回错误,这就是为什么我不明白,因为我使用了与前一个示例相同的偏移量,我使用了SUNFUNCS_RET_STRING。
2.在我写的第一点,它显示了某种正确的装束,这里是我的意思的解释。我们的官方气象机构ARSO每天在其页面上更新有关日出和日落的信息。该页面可以在this link找到(抱歉,因为它不是英文版)。底线是,对于我们的首都(卢布尔雅那),它有这样的信息:
日出:5:18 日出:20:41
我使用date_sunrise和date_sunset函数得到这个:
日出:05:15 日落:20:42
参数与第一点(纬度,经度,偏移,天顶)相同。现在纬度和经度肯定是正确的(checked with GeoHack for Ljubljana)。我开始认为这种差异来自zenith参数。但我在互联网上搜索了它并说:
天顶的最佳总体数字是真实日出/日落的90+(50/60)度
我无能为力为什么会遇到这种差异,这两个函数可能会返回错误的结果吗?
答案 0 :(得分:6)
当您使用时间戳时,它们几乎总是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);