PHPでは、 date_sunset()関数を使用して、特定の日付と場所の日没時間を計算します。デフォルトでは、この関数は、サーバーのデフォルトタイムゾーンに基づいて時間を返します。サーバータイムゾーンの設定がターゲットロケーションタイムゾーンとは異なる場合、得られた日没時間が不正確になる可能性があります。この記事では、date_sunset()関数のタイムゾーンパラメーターを調整して、正しい日没時間が得られるようにする方法を詳細に紹介します。
date_sunset()関数の基本的な構文は次のとおりです。
date_sunset(
int $timestamp,
int $format = SUNFUNCS_RET_STRING,
float $latitude = ini_get("date.default_latitude"),
float $longitude = ini_get("date.default_longitude"),
float $zenith = ini_get("date.sunset_zenith"),
float $gmt_offset = 0
): string|int|float|false
$タイムスタンプ:DateTimeのUNIXタイムスタンプ
$フォーマット:return値形式、一般的に使用される文字列形式( sunfuncs_ret_string )またはタイムスタンプ形式( sunfuncs_ret_timestamp )
$ latitude 、 $ rocedity :地理的座標
$ゼニス:太陽の高さの角度、デフォルト
$ gmt_offset :タイムゾーンオフセット(GMTに比べて時間数)
date_sunset()最後のパラメーター$ gmt_offsetは、タイムゾーンを調整する鍵です。次のような、GMTに比べて時間数です。
北京時間(UTC+8)着信8
ニューヨークタイム(UTC-5)着信-5
$ gmt_offsetを正しく渡すことで、関数がそのタイムゾーンの正確な日没時間を返すことができます。
次の例は、Date_sunset()を使用して北京時間の日没時間を取得する方法を示しています。
<?php
// タイムゾーンを設定します,影響 date() 等しい関数の出力,但不影響 date_sunset の計算
date_default_timezone_set('Asia/Shanghai');
// 今日のタイムスタンプを入手してください
$timestamp = time();
// 地理的座標を設定します(北京)
$latitude = 39.9042;
$longitude = 116.4074;
// タイムゾーンを設定します偏移,北京の時間はです +8
$gmt_offset = 8;
// 日没の時間を取得します,形式を文字列として返します "HH:MM"
$sunset_time = date_sunset($timestamp, SUNFUNCS_RET_STRING, $latitude, $longitude, 90, $gmt_offset);
echo "北京時間の夕日はです:$sunset_time";
?>
このコードは次のような出力です。
北京時間の夕日はです:18:45
$ gmt_offsetは、 $ latitudeと$ suceitudeに対応するタイムゾーンと一致する必要があります。
PHPサーバータイムゾーンは、 date_sunsetのタイムゾーン計算に影響しませんが、日付()および他の時間関数の出力に影響します。
夏時間に対処したい場合は、日付に基づいて$ GMT_OFFSETを動的に調整するか、より複雑な日付と時刻のライブラリ( DatetimeとDateTimeZoneを組み合わせて)を使用して、より正確なモーメントを計算する必要があります。
date_sunset()は、夏時間の自動識別をサポートしていません。タイムゾーンをより正確に処理する必要がある場合は、最初にDateTimeを使用してタイムゾーンでタイムスタンプを取得し、次にdate_sunset()に渡すことができます。
例:
<?php
// ターゲットタイムゾーン
$timezone = new DateTimeZone('America/New_York');
// 日付と時刻を指定します
$date = new DateTime('now', $timezone);
// タイムスタンプを入手してください
$timestamp = $date->getTimestamp();
// 地理的座標(ニューヨーク)
$latitude = 40.7128;
$longitude = -74.0060;
// タイムゾーンオフセットを取得します(時間)
$gmt_offset = $timezone->getOffset($date) / 3600;
// 日没の時間を取得します
$sunset_time = date_sunset($timestamp, SUNFUNCS_RET_STRING, $latitude, $longitude, 90, $gmt_offset);
echo "ニューヨーク时间的日落时间是:$sunset_time";
?>
これにより、ターゲットタイムゾーンに従ってオフセットを自動的に調整して、手動の計算エラーを回避できます。
date_sunset()の$ gmt_offsetパラメーターは、返された日没時間のタイムゾーンを決定します。
正しいタイムゾーンオフセットを手動で通過すると、正確な結果が確実になります。
DateTimeとDateTimeZoneを組み合わせることで、複雑なタイムゾーンと夏時間の節約時間を処理する柔軟性が高まります。