我正在尝试构建一个函数,该函数将返回查塔姆群岛的日出和日落时间(通常为 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 ) 的错误报告中,并找到了解决方法,详情如下