1

チャタム諸島の日の出と日の入り時刻を返す関数を構築しようとしています (通常は UTC+12:45、夏は +13:45)。

ニュージーランドでは問題なく動作する次のコードがありますが、入力がチャタムに設定されている翌日の時間を返します。

<?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 (NZ 夏時間) の日の出時刻を経度 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 ) のバグ レポートに追加し、以下に詳述する回避策を見つけました。

4

1 に答える 1