現在の位置: ホーム> 最新記事一覧> date_sunsetおよびdate_sunrise関数と組み合わせて日中の期間を計算する方法は?

date_sunsetおよびdate_sunrise関数と組み合わせて日中の期間を計算する方法は?

gitbox 2025-05-28

PHPでは、 date_sunrise()date_sunset()は、指定された日付と地理的座標に基づいて、日の出と日没時刻を計算できる2つの非常に実用的な関数です。これら2つの関数を組み合わせることにより、日の合計期間を非常に簡単に計算できます。

これは、自動ライトスイッチング、スマートファーム、屋外アクティビティ管理、その他のシステムなど、日の長さに応じてビジネスロジックの調整を必要とするアプリケーションシナリオにとって非常に価値があります。

基本機能の紹介

date_sunrise()

 date_sunrise(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.sunrise_zenith"), float $gmt_offset = 0): string|int|float|false

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

例:特定の日の昼間の時間を計算する

具体的な例を使用して、昼間を計算する方法を説明しましょう。

  • 日付:現在の日付

  • 座標:北京市(緯度39.9042、経度116.4074)

  • タイムゾーン:東第8地区(UTC+8)

 <?php

date_default_timezone_set('Asia/Shanghai');

$timestamp = time();
$latitude = 39.9042;
$longitude = 116.4074;
$gmt_offset = 8;

// 日の出と日没の時間を手に入れましょう(による UNIX タイムスタンプ形式で戻ります)
$sunrise = date_sunrise($timestamp, SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, 90, $gmt_offset);
$sunset  = date_sunset($timestamp, SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, 90, $gmt_offset);

if ($sunrise !== false && $sunset !== false) {
    $dayLength = $sunset - $sunrise;

    // 時間と分形式に変換します
    $hours = floor($dayLength / 3600);
    $minutes = floor(($dayLength % 3600) / 60);

    echo "日の出の時間: " . date("H:i:s", $sunrise) . PHP_EOL;
    echo "日没の時間: " . date("H:i:s", $sunset) . PHP_EOL;
    echo "昼間: {$hours}時間{$minutes}分" . PHP_EOL;
} else {
    echo "无法计算日出或日没の時間。座標または日付設定を確認してください。";
}

注意すべきこと

  1. date_sunrise()およびdate_sunset()で使用されるゼニス角は、デフォルトで90度です。これは、日の出と日没の時間が、地平線がちょうど上昇または倒れた位置から計算されることを意味します。必要に応じて調整できます。

  2. タイムゾーンオフセット( $ gmt_offset )を正しく設定して、出力時間が現地時間に適合するようにする必要があります。

  3. 返された虚偽の場合、それは通常、異常な座標設定、極端な昼、または極端な夜などの特別な状況によるものです。

アプリケーション拡張機能

この計算方法は、次のような時間に敏感なシステムに簡単に埋め込むことができます。

  • 自動照明システム(スマートホームコントローラーなど)

  • https://api.gitbox.net/astro/daylength?lat=39.9&lon=116.4などの天文APIインターフェイス

  • リアルタイムの昼間の変更を示すための屋外の天気ウィジェット

PHPが提供するこれらの太陽機能を使用して、外部サービスに依存することなく、太陽高度角に関連する時間データを正確に取得し、システムによりインテリジェントな判断ベースを提供できます。