函数date_sunrise()返回错误的时间并可能返回结果

时间:2011-05-27 12:45:32

标签: php date

关于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)度

我无能为力为什么会遇到这种差异,这两个函数可能会返回错误的结果吗?

1 个答案:

答案 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);