php 日出日落实现
计算日出日落时间的方法
PHP中计算日出日落时间可以通过内置的date_sun_info()或date_sunrise()和date_sunset()函数实现。这些函数基于地理位置和日期计算太阳位置。
使用date_sunrise和date_sunset函数
这两个函数需要经纬度、时间戳和 zenith(太阳角度)参数:

$latitude = 39.9042; // 纬度(例如北京)
$longitude = 116.4074; // 经度
$date = time(); // 当前时间戳
$zenith = ini_get("date.sunrise_zenith"); // 默认太阳角度
$sunrise = date_sunrise($date, SUNFUNCS_RET_STRING, $latitude, $longitude, $zenith);
$sunset = date_sunset($date, SUNFUNCS_RET_STRING, $latitude, $longitude, $zenith);
echo "日出时间: " . $sunrise . "\n";
echo "日落时间: " . $sunset;
使用date_sun_info函数
PHP 5.3+提供了更全面的date_sun_info(),返回包含多种太阳时间信息的数组:

$time = time();
$info = date_sun_info($time, $latitude, $longitude);
echo "日出: " . date("H:i", $info['sunrise']) . "\n";
echo "日落: " . date("H:i", $info['sunset']);
自定义zenith值
不同计算方式可能需要调整zenith参数:
- 日出日落标准:90°50'
- 民用曙光:96°
- 航海曙光:102°
- 天文曙光:108°
$civil_zenith = 96;
$sunrise = date_sunrise($date, SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, $civil_zenith);
时区处理
确保时区设置正确:
date_default_timezone_set('Asia/Shanghai');
注意事项
- 函数需要有效的经纬度坐标
- 高纬度地区可能产生极昼或极夜现象
- 结果精度受大气折射等因素影响
- 考虑使用第三方API(如Sunrise-Sunset API)获取更精确数据
完整示例
function getSunTimes($lat, $lng, $date = null) {
$date = $date ?: time();
date_default_timezone_set('Asia/Shanghai');
return [
'sunrise' => date_sunrise($date, SUNFUNCS_RET_STRING, $lat, $lng),
'sunset' => date_sunset($date, SUNFUNCS_RET_STRING, $lat, $lng),
'transit' => date_sunrise($date, SUNFUNCS_RET_STRING, $lat, $lng, 90)
];
}






