当前位置: 首页> 最新文章列表> 如何结合 date_sunset 和 date_sunrise 函数计算白昼时长?

如何结合 date_sunset 和 date_sunrise 函数计算白昼时长?

gitbox 2025-05-28

在 PHP 中,date_sunrise()date_sunset() 是两个非常实用的函数,它们可以根据指定的日期和地理坐标,计算出当天的日出和日落时间。将这两个函数结合使用,我们可以非常方便地算出白昼的总时长。

这对于需要根据白昼长度调整业务逻辑的应用场景,比如自动开关灯、智能农场、户外活动管理等系统来说,非常有价值。

基本函数介绍

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)

  • 时区:东八区(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. 如果返回的是 false,通常是因为坐标设置异常、极昼或极夜等特殊情况。

应用扩展

该计算方法可以轻松嵌入到任何时间敏感的系统中,比如:

  • 自动调节灯光系统(如智能家居控制器)

  • 天文类 API 接口,比如 https://api.gitbox.net/astro/daylength?lat=39.9&lon=116.4

  • 户外天气小组件,展示实时白昼变化

利用 PHP 自带的这些太阳函数,我们可以在不依赖外部服务的情况下,准确地获取与太阳高度角相关的时间数据,为系统提供更加智能化的判断依据。