
本文详解如何使用 PHP 的 date_sun_info() 函数获取指定日期和地理坐标的日出、日落等天文时间,并通过数组键名直接访问对应时间戳,再格式化为可读的 "H:i:s" 时间字符串。
本文详解如何使用 php 的 `date_sun_info()` 函数获取指定日期和地理坐标的日出、日落等天文时间,并通过数组键名直接访问对应时间戳,再格式化为可读的 "h:i:s" 时间字符串。
date_sun_info() 是 PHP 内置函数,用于根据日期、纬度($lat)和经度($lon)计算当日的日出(sunrise)、日落(sunset)、正午(transit)、晨光始(civil_twilight_begin)、昏影终(civil_twilight_end)等 7 个关键天文时间点,返回一个以时间戳(Unix timestamp)为值的关联数组。
要准确提取日出与日落时间,无需遍历整个数组,而应直接通过键名访问:
<?php $date = strtotime(date('Y-m-d')); // 获取今日时间戳
$lat = 39.9042; // 示例:北京纬度
$lon = 116.4074; // 示例:北京经度
$sun_info = date_sun_info($date, $lat, $lon);
if ($sun_info === false) {
die('无法计算日出日落时间:地理坐标或日期无效');
}
// 直接提取并格式化关键时间点
$sunrise = date('H:i:s', $sun_info['sunrise']);
$sunset = date('H:i:s', $sun_info['sunset']);
$transit = date('H:i:s', $sun_info['transit']);
echo "日出时间:{$sunrise}\n";
echo "正午时刻:{$transit}\n";
echo "日落时间:{$sunset}\n";
?>
✅ 关键要点说明:
- $sun_info['sunrise'] 和 $sun_info['sunset'] 返回的是 Unix 时间戳(整型),需用 date() 函数转换为人类可读格式;
- 函数在输入坐标超出有效范围(如纬度不在 -90~90、经度不在 -180~180)或日期异常时会返回 false,务必进行错误判断;
- 支持的全部键名包括:sunrise, sunset, transit, civil_twilight_begin, civil_twilight_end, nautical_twilight_begin, nautical_twilight_end, astronomical_twilight_begin, astronomical_twilight_end(具体取决于 PHP 版本与配置,详见 PHP 官方文档);
- 所有时间均基于本地时区(由 date_default_timezone_set() 设置),非 UTC —— 如需 UTC 时间,请先切换时区或手动调整。
掌握这种“按需取键”的方式,既提升代码可读性,又避免冗余循环,是高效处理天文时间数据的标准实践。











