date_sunset

関数の概要

PHPのdate_sunset関数は、指定した日時と場所の「日の入り時刻」を計算して取得するための関数です。地理的な経度・緯度を元に、その日の正確な日の入り時間を取得できるため、天文計算や時間管理に役立ちます。

パラメータの説明

  • timestamp(整数): 日の入り時間を取得したい日時のUnixタイムスタンプ。省略すると現在の日時が対象になります。
  • format(整数): 戻り値のフォーマットを指定します。主な値は SUNFUNCS_RET_STRING(’H:i’形式の文字列)または SUNFUNCS_RET_TIMESTAMP(Unixタイムスタンプ)。指定しなければ文字列で返されます。
  • latitude(浮動小数点数): 緯度(例: 東京は約35.6895)。北緯は正、南緯は負。
  • longitude(浮動小数点数): 経度(例: 東京は約139.6917)。東経は正、西経は負。
  • zenith(浮動小数点数): 観測角度。標準日の入りは90+50/60=90.833度が一般的です。指定しない場合は標準値が使われます。
  • gmt_offset(浮動小数点数): タイムゾーンのGMTオフセット。日本なら9(JST)です。指定しない場合は0(UTC)扱いになります。

戻り値

日の入り時刻を指定したフォーマットで返します。formatに応じて、H:i形式の文字列またはUnixタイムスタンプとして取得可能です。計算不能な場合はFALSEを返します。

使用例

基本的な使い方(東京の日の入り時間を文字列で取得)

<?php
$timestamp = time();
$latitude = 35.6895;    // 東京の緯度
$longitude = 139.6917;  // 東京の経度
$gmt_offset = 9;        // JSTのGMTオフセット

$sunset = date_sunset($timestamp, SUNFUNCS_RET_STRING, $latitude, $longitude, 90.833, $gmt_offset);
echo "東京の日の入り時刻: " . $sunset;
?>

この例では現在日時で東京の標準的な日の入り時刻(午後6時台など)を「時:分」形式で取得しています。

Unixタイムスタンプ形式で取得する例

<?php
$sunset_timestamp = date_sunset(time(), SUNFUNCS_RET_TIMESTAMP, 35.6895, 139.6917, 90.833, 9);
echo "日の入りタイムスタンプ: " . $sunset_timestamp . "n";
echo "日時形式: " . date('Y-m-d H:i:s', $sunset_timestamp);
?>

こちらはUnixタイムスタンプ形式で取得し、date()関数を使って好みの日時フォーマットに変換して表示しています。

異なる場所・日時で使う例(札幌の5月1日の夕方を調べる)

<?php
// 2024年5月1日の00:00のタイムスタンプを作成(札幌)
$timestamp = mktime(0, 0, 0, 5, 1, 2024);
$latitude = 43.0642;   // 札幌の緯度
$longitude = 141.3469; // 札幌の経度
$gmt_offset = 9;

$sunset = date_sunset($timestamp, SUNFUNCS_RET_STRING, $latitude, $longitude, 90.833, $gmt_offset);
echo "札幌の2024年5月1日の日の入り時刻: " . $sunset;
?>

日時を指定して特定の日の特定地域の日の入り時間を取得できます。mktime関数で日時を指定する点がポイントです。

関連する関数

  • date_sunrise – 日の出時刻を取得する関数
  • date_sun_info – 指定日の太陽の情報(日の出・日の入・昼の長さなど)をまとめて取得する関数
  • date_default_timezone_set – タイムゾーン設定を変更する関数
  • date – 日付・時刻のフォーマットを行う関数

まとめ

date_sunset関数は、指定した日時と場所での正確な日の入り時刻を簡単に取得できる強力な関数です。天文計算が必要なウェブアプリや、地域ごとの時刻管理に便利で、使い方もシンプルです。パラメータを適切に設定することで、文字列やタイムスタンプの形式で扱え、PHPの日付・時刻関数群と組み合わせた応用も可能です。ぜひ実務でも活用してください。