用PHP获取查塔姆群岛的日出时间

时间:2013-08-14 23:10:45

标签: php timezone

我正在尝试建立一个能够返回查塔姆群岛日出和日落时间的功能(UTC + 12:45正常,夏季+13:45)

我有以下代码适用于新西兰,但当输入设置为Chatham时,会返回第二天的时间。

<?php
$timeInUTC = "2013-08-15T00:00:01Z";
$this_tz = new \DateTimeZone("Pacific/Chatham");  
$lat = -44;
$long = -176.5;   

$startTimestamp = strtotime($timeInUTC);            
$startTime = new \DateTime($timeInUTC,$this_tz);
$offset = ($this_tz->getOffset($startTime))/3600;                   

$sunriseTimestamp = date_sunrise($startTimestamp, SUNFUNCS_RET_TIMESTAMP, $lat, $long, 90, $offset);
$sunsetTimestamp = date_sunset($startTimestamp, SUNFUNCS_RET_TIMESTAMP, $lat, $long, 90, $offset);


$startTimeString = date("c",$startTimestamp);
$sunriseTimeString = date("c",$sunriseTimestamp);
$sunsetTimeString = date("c",$sunsetTimestamp);

echo "At ($lat,$long) on the day of $startTimeString the sun rises at $sunriseTimeString and sets at $sunsetTimeString (offset of $offset)\n";


?>

返回

At (-44,-176.5) on the day of 2013-08-15T12:00:01+12:00 the sun rises at 2013-08-16T06:43:28+12:00 and sets at 2013-08-16T16:57:13+12:00 (offset of 12.75)

从印刷品中可以看出,它认为日出是在指定时间后的18.75小时,而日落是在输入时间后27小时,这是不可能的,除非它在北极圈并且太阳下降了超过24小时。

那么,我是否错误地使用了date_sunrise,或者PHP遇到了我必须解决的错误?

附加 我已经尝试调整经度,发现-178.9140给出了正确的日出日(我必须假设时间是正确的)但-178.9130向前跳24小时。所有其他输入都是相同的

更新 随着夏季时间的变化,这种情况在新西兰中途蔓延。

2013年10月1日10:35(新西兰夏季时间)经度177.25检查日出时间2013-10-01T06:45:18 + 13:00,但日出时经度为177.5,据报道为2013年-10-02T06:44:18 + 13:00

我已将此添加到php.net(https://bugs.php.net/bug.php?id=53148)的错误报告中,并找到了解决方法,详情如下

1 个答案:

答案 0 :(得分:0)

这似乎是PHP中的一个错误,我必须找到一个解决方法。

$startDayOfYear = date("z",$startTimestamp);
$sunriseDayOfYear = date("z",$sunriseTimestamp);

if($startDayOfYear != $sunriseDayOfYear)
{
    $sunriseTimeString = date("c",$sunriseTimestamp." - 1 day");
    $sunsetTimeString = date("c",$sunsetTimestamp." - 1 day");
} else {
    $sunriseTimeString = date("c",$sunriseTimestamp);
    $sunsetTimeString = date("c",$sunsetTimestamp);
}