PHP jdtofrench() 函数

定义和用法

jdtofrench() 函数用于将儒略日数转换为法国共和历(French Republican Calendar)日期。

这个函数是 frenchtojd() 的反向操作,在法国历史研究、历法转换和法国大革命时期历史分析中非常有用。

语法

jdtofrench(int $julian_day): string
参数 描述
julian_day 必需。指定要转换的儒略日数

返回值

返回一个字符串,格式为 "月/日/年",表示指定儒略日数对应的法国共和历日期。

法国共和历背景

法国共和历特点:

  • 法国大革命期间采用的历法(1793-1805)
  • 每年12个月,每月30天
  • 每年额外有5-6个补充日(闰年)
  • 月份名称基于自然现象和农业活动
  • 使用年份从1792年9月22日(共和国成立)开始计算

法国共和历月份

月份编号 法语名称 中文含义
1Vendémiaire葡月
2Brumaire雾月
3Frimaire霜月
4Nivôse雪月
5Pluviôse雨月
6Ventôse风月
7Germinal芽月
8Floréal花月
9Prairial牧月
10Messidor获月
11Thermidor热月
12Fructidor果月
13补充日年终节日

实例演示

基本用法 - 转换儒略日为法国共和历

// 将儒略日 2375840 转换为法国共和历日期
$jd = 2375840;
$french_date = jdtofrench($jd);
echo "儒略日 {$jd} 对应的法国共和历日期: " . $french_date;

输出结果:

儒略日 2375840 对应的法国共和历日期: 1/1/1

与frenchtojd配合使用

// 完整的法国共和历转换流程
$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)

注意事项

  • 需要确保PHP的Calendar扩展已启用
  • 法国共和历只在1793-1805年间实际使用
  • 年份范围限制为1-14(对应公历1792-1805)
  • 每月固定30天,第13个月为补充日(5-6天)
  • 返回的日期格式为 "月/日/年"
  • 对于超出范围的儒略日,函数仍会返回结果,但历史准确性无法保证

实际应用场景

jdtofrench() 函数在以下场景中特别有用:

  • 法国历史研究和文献整理
  • 历法系统比较和研究
  • 历史日期转换工具
  • 教育软件和历法学习工具
  • 法国大革命时期的历史研究
  • 多历法日历应用开发

相关函数

  • frenchtojd() - 将法国共和历日期转换为儒略日数
  • jdtogregorian() - 将儒略日数转换为公历日期
  • gregoriantojd() - 将公历日期转换为儒略日数
  • jdtojulian() - 将儒略日数转换为儒略历日期
  • cal_from_jd() - 将儒略日数转换为各种日历日期
  • jdmonthname() - 返回儒略日数的月份名称