使用date_diff时date_sun_info出现问题

时间:2013-03-09 23:48:52

标签: php datetime php-5.3

我正在开发一个基于邮政编码返回大量优质信息的API - 但我遇到了date_sun_info的问题,只有在我调用date_diff时才会发生问题。 (当然我也尝试过使用DateTime::diff,但更简单的问题标题是程序版本,它会导致有趣的结果。不需要外部库的重新创建的代码如下:

$suninfo=array();
$ret=array();
$suninfo = date_sun_info(time(), "47.627102", "-122.637299");
$sun=array();
foreach($suninfo as $key => $tstamp) {
    $sun[$key] = date("H:i:s", $tstamp);
}
$ret['suninfo'] = $sun;
$ret['raw'] = $suninfo;
$sunrise = (int)$suninfo['sunrise'];
//$sunrise = date_sunrise(time(), SUNFUNCS_RET_TIMESTAMP, $res['latitude'], $res['longitude']);
$sunset = (int)$suninfo['sunset'];
//$sunset = $sunrise = date_sunset(time(), SUNFUNCS_RET_TIMESTAMP, $res['latitude'], $res['longitude']);
$d1 = new DateTime("@{$sunrise}");
$d2 = new DateTime("@{$sunset}"); 
$dif = date_diff($d2, $d1, true);  //$d2->diff($d1);
$length = $dif->format("%h:%i");
$ret['dayLength'] = $length;

echo "<pre>". print_r($ret, true) ."</pre>";

相关代码会在第一页加载时生成正确的结果:

Array
(
    [suninfo] => Array
        (
            [sunrise] => 06:32:37
            [sunset] => 18:08:50
            [transit] => 12:20:43
            [civil_twilight_begin] => 06:02:02
            [civil_twilight_end] => 18:39:25
            [nautical_twilight_begin] => 05:26:18
            [nautical_twilight_end] => 19:15:08
            [astronomical_twilight_begin] => 04:50:00
            [astronomical_twilight_end] => 19:51:27
        )

    [raw] => Array
        (
            [sunrise] => 1362839557
            [sunset] => 1362881330
            [transit] => 1362860443
            [civil_twilight_begin] => 1362837722
            [civil_twilight_end] => 1362883165
            [nautical_twilight_begin] => 1362835578
            [nautical_twilight_end] => 1362885308
            [astronomical_twilight_begin] => 1362833400
            [astronomical_twilight_end] => 1362887487
        )

    [dayLength] => 11:36
)

但是,每个后续页面加载都会得到以下结果:

Array
(
    [suninfo] => Array
        (
            [sunrise] => 16:00:01
            [sunset] => 16:00:01
            [transit] => 12:20:43
            [civil_twilight_begin] => 06:02:02
            [civil_twilight_end] => 18:39:25
            [nautical_twilight_begin] => 05:26:18
            [nautical_twilight_end] => 19:15:08
            [astronomical_twilight_begin] => 04:50:00
            [astronomical_twilight_end] => 19:51:27
        )

    [raw] => Array
        (
            [sunrise] => 1
            [sunset] => 1
            [transit] => 1362860443
            [civil_twilight_begin] => 1362837722
            [civil_twilight_end] => 1362883165
            [nautical_twilight_begin] => 1362835578
            [nautical_twilight_end] => 1362885308
            [astronomical_twilight_begin] => 1362833400
            [astronomical_twilight_end] => 1362887487
        )

    [dayLength] => 0:0
)

这很有趣,因为在评论date_diff时,date_sun_info每次都能正常运行,真正有趣的部分是它只会在第一页加载后更改date_sun_info的输出。如您所见,sunrisesunset之后被设置为1。 (这也意味着我计算的dayLength始终为0。)正如您在代码中看到的那样,我已尝试使用date_sunrise和{{3}在我的问题排查过程中,但在date_diff之后,这些内容也会在后续页面加载时返回1

我尝试过的其他事情:在自己的函数内和自己的命名空间中对dayLength计算进行分区。清除缓存,不同的浏览器等

我确实意识到还有其他方法可以在不使用此函数的情况下计算dayLength,并实现了这些方法,以便API按预期工作。我的问题是,为什么date_sun_info在使用date_diff时首次加载页面后会产生不同的结果?我已经搜索过PHP的bug并且无法找到任何内容,也无法在其他任何地方找到任何可能导致此错误的内容。我希望有人可以告诉我这个原因。它被复制到两台机器上,包括PHP 5.3.x和Apache 2.2,一台是Windows 7,另一台是Ubuntu。

0 个答案:

没有答案