jdtofrench() 函数用于将儒略日数转换为法国共和历(French Republican Calendar)日期。
这个函数是 frenchtojd() 的反向操作,在法国历史研究、历法转换和法国大革命时期历史分析中非常有用。
jdtofrench(int $julian_day): string
| 参数 | 描述 |
|---|---|
| julian_day | 必需。指定要转换的儒略日数 |
返回一个字符串,格式为 "月/日/年",表示指定儒略日数对应的法国共和历日期。
法国共和历特点:
| 月份编号 | 法语名称 | 中文含义 |
|---|---|---|
| 1 | Vendémiaire | 葡月 |
| 2 | Brumaire | 雾月 |
| 3 | Frimaire | 霜月 |
| 4 | Nivôse | 雪月 |
| 5 | Pluviôse | 雨月 |
| 6 | Ventôse | 风月 |
| 7 | Germinal | 芽月 |
| 8 | Floréal | 花月 |
| 9 | Prairial | 牧月 |
| 10 | Messidor | 获月 |
| 11 | Thermidor | 热月 |
| 12 | Fructidor | 果月 |
| 13 | 补充日 | 年终节日 |
// 将儒略日 2375840 转换为法国共和历日期
$jd = 2375840;
$french_date = jdtofrench($jd);
echo "儒略日 {$jd} 对应的法国共和历日期: " . $french_date;
输出结果:
儒略日 2375840 对应的法国共和历日期: 1/1/1
// 完整的法国共和历转换流程
$french_month = 1;
$french_day = 1;
$french_year = 1;
// 转换为儒略日
$jd = frenchtojd($french_month, $french_day, $french_year);
echo "法国共和历日期: {$french_month}/{$french_day}/{$french_year}\n";
echo "儒略日: {$jd}\n";
// 转换回法国共和历
$converted_date = jdtofrench($jd);
echo "转换回法国共和历: {$converted_date}";
// 验证是否一致
if ($converted_date === "{$french_month}/{$french_day}/{$french_year}") {
echo "\n转换验证: 成功";
} else {
echo "\n转换验证: 失败";
}
输出结果:
法国共和历日期: 1/1/1
儒略日: 2375840
转换回法国共和历: 1/1/1
转换验证: 成功
// 转换重要历史事件的法国共和历日期
$historical_dates = [
"共和国成立" => [9, 22, 1792],
"路易十六被处决" => [1, 21, 1793],
"罗伯斯庇尔倒台" => [7, 27, 1794],
"拿破仑政变" => [11, 9, 1799]
];
foreach ($historical_dates as $event => $date) {
list($month, $day, $year) = $date;
$jd = gregoriantojd($month, $day, $year);
$french_date = jdtofrench($jd);
echo "{$event} (公历{$year}-{$month}-{$day}): 法国共和历 {$french_date}\n";
}
输出结果:
共和国成立 (公历1792-9-22): 法国共和历 1/1/1
路易十六被处决 (公历1793-1-21): 法国共和历 1/2/1
罗伯斯庇尔倒台 (公历1794-7-27): 法国共和历 11/9/2
拿破仑政变 (公历1799-11-9): 法国共和历 2/18/8
// 处理法国共和历的年终补充日
$jd = frenchtojd(13, 5, 3); // 共和历3年补充日第5天
$french_date = jdtofrench($jd);
$gregorian_date = jdtogregorian($jd);
echo "儒略日: {$jd}\n";
echo "法国共和历: {$french_date}\n";
echo "公历日期: {$gregorian_date}";
输出结果:
儒略日: 2379910
法国共和历: 13/5/3
公历日期: 9/17/1795
// 创建格式化的法国共和历日期输出函数
function format_french_date($jd) {
$french_date = jdtofrench($jd);
list($month, $day, $year) = explode('/', $french_date);
// 月份名称映射
$month_names = [
1 => 'Vendémiaire', 2 => 'Brumaire', 3 => 'Frimaire',
4 => 'Nivôse', 5 => 'Pluviôse', 6 => 'Ventôse',
7 => 'Germinal', 8 => 'Floréal', 9 => 'Prairial',
10 => 'Messidor', 11 => 'Thermidor', 12 => 'Fructidor',
13 => 'Jour complémentaire'
];
if ($month == 13) {
return "{$month_names[$month]} {$day}, An {$year}";
} else {
return "{$day} {$month_names[$month]}, An {$year}";
}
}
// 使用格式化函数
$jd = frenchtojd(11, 9, 2); // 热月9日
$formatted_date = format_french_date($jd);
$gregorian_date = jdtogregorian($jd);
echo "儒略日: {$jd}\n";
echo "格式化法国共和历: {$formatted_date}\n";
echo "对应公历: {$gregorian_date}";
输出结果:
儒略日: 2377874
格式化法国共和历: 9 Thermidor, An 2
对应公历: 7/27/1794
// 验证法国共和历日期的有效性
function validate_jd_for_french($jd) {
$french_date = jdtofrench($jd);
list($month, $day, $year) = explode('/', $french_date);
// 检查是否在有效范围内
if ($year < 1 || $year > 14) {
return "儒略日 {$jd} 超出法国共和历有效年份范围";
}
// 检查月份和天数
if ($month < 1 || $month > 13) {
return "儒略日 {$jd} 产生无效月份";
}
if ($day < 1 || $day > 30) {
return "儒略日 {$jd} 产生无效天数";
}
return "儒略日 {$jd} 对应有效的法国共和历日期: {$french_date}";
}
// 测试验证函数
echo validate_jd_for_french(2375840) . "\n"; // 有效
echo validate_jd_for_french(2000000) . "\n"; // 无效(年份太小)
echo validate_jd_for_french(2500000) . "\n"; // 无效(年份太大)
输出结果:
儒略日 2375840 对应有效的法国共和历日期: 1/1/1
儒略日 2000000 超出法国共和历有效年份范围
儒略日 2500000 超出法国共和历有效年份范围
| 返回值: | 返回法国共和历日期字符串(格式:月/日/年) |
|---|---|
| PHP 版本: | 4.1+ |
| 依赖扩展: | 需要启用Calendar扩展 |
| 有效范围: | 儒略日范围对应法国共和历年份1-14(公历1792-1805) |
jdtofrench() 函数在以下场景中特别有用:
frenchtojd() - 将法国共和历日期转换为儒略日数jdtogregorian() - 将儒略日数转换为公历日期gregoriantojd() - 将公历日期转换为儒略日数jdtojulian() - 将儒略日数转换为儒略历日期cal_from_jd() - 将儒略日数转换为各种日历日期jdmonthname() - 返回儒略日数的月份名称