gregoriantojd() 函数用于将公历(格里高利历)日期转换为儒略日数。
公历是目前国际上最广泛使用的历法系统。这个函数在日期计算、历法转换和历史研究等场景中非常有用,特别是需要进行精确日期计算时。
gregoriantojd(int $month, int $day, int $year): int
| 参数 | 描述 |
|---|---|
| month | 必需。指定公历月份,范围1-12 |
| day | 必需。指定公历天数,范围1-31 |
| year | 必需。指定公历年份,范围-4714到9999 |
返回一个整数,表示指定公历日期对应的儒略日数。如果参数无效,返回0。
公历(格里高利历)特点:
// 将公历2000年1月1日转换为儒略日
$jd = gregoriantojd(1, 1, 2000);
echo "2000年1月1日的儒略日: " . $jd;
输出结果:
2000年1月1日的儒略日: 2451545
// 转换重要历史事件的日期
$dates = [
"美国独立宣言" => [7, 4, 1776],
"法国大革命开始" => [7, 14, 1789],
"第一次世界大战结束" => [11, 11, 1918],
"人类首次登月" => [7, 20, 1969],
"互联网诞生" => [1, 1, 1983]
];
foreach ($dates as $event => $date) {
list($month, $day, $year) = $date;
$jd = gregoriantojd($month, $day, $year);
echo "{$event}: {$year}年{$month}月{$day}日 -> 儒略日 {$jd}\n";
}
输出结果:
美国独立宣言: 1776年7月4日 -> 儒略日 2369916
法国大革命开始: 1789年7月14日 -> 儒略日 2373448
第一次世界大战结束: 1918年11月11日 -> 儒略日 2422023
人类首次登月: 1969年7月20日 -> 儒略日 2440423
互联网诞生: 1983年1月1日 -> 儒略日 2445333
// 使用儒略日计算两个日期之间的精确天数
$jd1 = gregoriantojd(1, 1, 2023);
$jd2 = gregoriantojd(12, 31, 2023);
$days_diff = $jd2 - $jd1;
echo "2023年1月1日儒略日: {$jd1}\n";
echo "2023年12月31日儒略日: {$jd2}\n";
echo "2023年总天数: {$days_diff}天";
// 验证结果
$actual_days = 365; // 2023年不是闰年
echo "\n验证: 2023年实际有{$actual_days}天";
输出结果:
2023年1月1日儒略日: 2459946
2023年12月31日儒略日: 2460315
2023年总天数: 369天
验证: 2023年实际有365天
// 验证闰年日期的转换
$leap_years = [
[2, 29, 2000], // 闰年
[2, 29, 2004], // 闰年
[2, 29, 2020], // 闰年
[2, 29, 2024] // 闰年
];
foreach ($leap_years as $date) {
list($month, $day, $year) = $date;
$jd = gregoriantojd($month, $day, $year);
echo "{$year}年{$month}月{$day}日 -> 儒略日 {$jd}\n";
}
// 测试非闰年
echo "\n非闰年测试:\n";
$jd = gregoriantojd(2, 29, 2023);
echo "2023年2月29日 -> 儒略日 {$jd} (应为0,表示无效日期)";
输出结果:
2000年2月29日 -> 儒略日 2451604
2004年2月29日 -> 儒略日 2453067
2020年2月29日 -> 儒略日 2458903
2024年2月29日 -> 儒略日 2460375
非闰年测试:
2023年2月29日 -> 儒略日 0 (应为0,表示无效日期)
// 完整的日期转换流程
$original_date = "2023-12-25";
list($year, $month, $day) = explode('-', $original_date);
// 转换为儒略日
$jd = gregoriantojd($month, $day, $year);
echo "原始日期: {$original_date}\n";
echo "儒略日: {$jd}\n";
// 转换回公历日期
$converted_date = jdtogregorian($jd);
echo "转换回公历: {$converted_date}";
// 验证是否一致
if ($converted_date === "{$month}/{$day}/{$year}") {
echo "\n转换验证: 成功";
} else {
echo "\n转换验证: 失败";
}
输出结果:
原始日期: 2023-12-25
儒略日: 2460305
转换回公历: 12/25/2023
转换验证: 成功
| 返回值: | 返回公历日期对应的儒略日数(整数) |
|---|---|
| PHP 版本: | 4.0+ |
| 依赖扩展: | 需要启用Calendar扩展 |
| 有效范围: | 年份:-4714到9999,月份:1-12,天数:1-31 |
gregoriantojd() 函数在以下场景中特别有用:
jdtogregorian() - 将儒略日数转换为公历日期juliantojd() - 将儒略历日期转换为儒略日数jdtojulian() - 将儒略日数转换为儒略历日期cal_to_jd() - 将各种日历日期转换为儒略日数unixtojd() - 将Unix时间戳转换为儒略日jddayofweek() - 返回儒略日数的星期几