PHP jdtojewish() 函数

定义和用法

jdtojewish() 函数用于将儒略日数转换为犹太历(Jewish Calendar)日期。

犹太历是犹太人使用的传统历法,基于月球周期和太阳年,主要用于宗教节日计算。这个函数在犹太文化研究、宗教节日计算和历史日期转换中非常有用。

语法

jdtojewish(int $julian_day, bool $hebrew = false, int $fl = 0): string
参数 描述
julian_day 必需。指定要转换的儒略日数
hebrew 可选。如果设置为true,返回希伯来字符的日期;默认为false,返回拉丁字符
fl 可选。格式化标志,控制日期的显示格式

返回值

返回一个字符串,表示指定儒略日数对应的犹太历日期。默认格式为 "月/日/年"。

犹太历背景

犹太历特点:

  • 阴阳历系统,基于月球周期和太阳年调整
  • 每年12或13个月,月份为29或30天
  • 年份从创世纪开始计算(公元前3761年)
  • 用于确定犹太宗教节日和安息日
  • 月份名称源自巴比伦历法

犹太历月份

月份编号 英文名称 中文含义
1Tishri提斯利月
2Heshvan赫舍万月
3Kislev基色娄月
4Tevet太贝特月
5Shevat舍巴特月
6Adar阿达尔月
7Adar I阿达尔一月(闰年)
8Adar II阿达尔二月(闰年)
9Nisan尼散月
10Iyyar依雅尔月
11Sivan息旺月
12Tammuz塔慕次月
13Av阿布月
14Elul厄路耳月

格式化标志

常量 描述
CAL_JEWISH_ADD_ALAFIM_GERESH 2 在年份后添加格列什符号
CAL_JEWISH_ADD_ALAFIM 4 在年份前添加"阿莱夫"
CAL_JEWISH_ADD_GERESHAYIM 8 在年份前添加双格列什符号

实例演示

基本用法 - 转换儒略日为犹太历日期

// 将儒略日 2451545 转换为犹太历日期
$jd = 2451545;
$jewish_date = jdtojewish($jd);
echo "儒略日 {$jd} 对应的犹太历日期: " . $jewish_date;

输出结果:

儒略日 2451545 对应的犹太历日期: 4/23/5760

使用希伯来字符输出

// 使用希伯来字符输出犹太历日期
$jd = gregoriantojd(1, 1, 2000);
$jewish_latin = jdtojewish($jd);
$jewish_hebrew = jdtojewish($jd, true);

echo "公历2000年1月1日:\n";
echo "拉丁字符: {$jewish_latin}\n";
echo "希伯来字符: {$jewish_hebrew}";

输出结果:

公历2000年1月1日:
拉丁字符: 4/23/5760
希伯来字符: כשן יד תשס

转换重要历史日期

// 转换重要历史事件的犹太历日期
$historical_dates = [
    "以色列建国" => [5, 14, 1948],
    "六日战争开始" => [6, 5, 1967],
    "赎罪日战争" => [10, 6, 1973],
    "奥斯陆协议签署" => [9, 13, 1993]
];

foreach ($historical_dates as $event => $date) {
    list($month, $day, $year) = $date;
    $jd = gregoriantojd($month, $day, $year);
    $jewish_date = jdtojewish($jd);
    echo "{$event} (公历{$year}-{$month}-{$day}): 犹太历 {$jewish_date}\n";
}

输出结果:

以色列建国 (公历1948-5-14): 犹太历 2/5/5708
六日战争开始 (公历1967-6-5): 犹太历 3/26/5727
赎罪日战争 (公历1973-10-6): 犹太历 4/10/5734
奥斯陆协议签署 (公历1993-9-13): 犹太历 6/27/5753

使用格式化标志

// 使用不同的格式化标志
$jd = gregoriantojd(1, 1, 2000);

echo "默认格式: " . jdtojewish($jd) . "\n";
echo "添加阿莱夫: " . jdtojewish($jd, false, CAL_JEWISH_ADD_ALAFIM) . "\n";
echo "添加格列什: " . jdtojewish($jd, false, CAL_JEWISH_ADD_ALAFIM_GERESH) . "\n";
echo "添加双格列什: " . jdtojewish($jd, false, CAL_JEWISH_ADD_GERESHAYIM) . "\n";
echo "组合标志: " . jdtojewish($jd, false, CAL_JEWISH_ADD_ALAFIM | CAL_JEWISH_ADD_GERESHAYIM);

输出结果:

默认格式: 4/23/5760
添加阿莱夫: 4/23/5760
添加格列什: 4/23/5760׳
添加双格列什: 4/23/״5760
组合标志: 4/23/״5760

处理闰年日期

// 处理犹太历闰年(有13个月)
function is_jewish_leap_year($jewish_year) {
    // 犹太历闰年规则:7年周期中的第3、6、8、11、14、17、19年
    $cycle_year = $jewish_year % 19;
    return in_array($cycle_year, [0, 3, 6, 8, 11, 14, 17]);
}

// 测试不同年份
$test_years = [5782, 5783, 5784, 5785];
foreach ($test_years as $year) {
    $is_leap = is_jewish_leap_year($year);
    $status = $is_leap ? "闰年(13个月)" : "平年(12个月)";
    echo "犹太历{$year}年: {$status}\n";
}

// 检查具体日期
$jd = gregoriantojd(3, 15, 2023); // 5783年是闰年
$jewish_date = jdtojewish($jd);
echo "\n公历2023年3月15日: 犹太历 {$jewish_date}";
list($month, $day, $year) = explode('/', $jewish_date);
if ($month > 12) {
    echo " (闰年的第13个月)";
}

输出结果:

犹太历5782年: 平年(12个月)
犹太历5783年: 闰年(13个月)
犹太历5784年: 平年(12个月)
犹太历5785年: 闰年(13个月)

公历2023年3月15日: 犹太历 7/22/5783 (闰年的第13个月)

格式化犹太历日期输出

// 创建格式化的犹太历日期输出函数
function format_jewish_date($jd, $include_hebrew = false) {
    $jewish_date = jdtojewish($jd);
    list($month, $day, $year) = explode('/', $jewish_date);

    // 月份名称映射
    $month_names = [
        1 => 'Tishri', 2 => 'Heshvan', 3 => 'Kislev',
        4 => 'Tevet', 5 => 'Shevat', 6 => 'Adar',
        7 => 'Adar I', 8 => 'Adar II', 9 => 'Nisan',
        10 => 'Iyyar', 11 => 'Sivan', 12 => 'Tammuz',
        13 => 'Av', 14 => 'Elul'
    ];

    $formatted = "{$day} {$month_names[$month]}, {$year}";

    if ($include_hebrew) {
        $hebrew_date = jdtojewish($jd, true);
        $formatted .= " ({$hebrew_date})";
    }

    return $formatted;
}

// 使用格式化函数
$jd = gregoriantojd(9, 25, 2023); // 犹太新年5784
$formatted_date = format_jewish_date($jd, true);
$gregorian_date = jdtogregorian($jd);

echo "儒略日: {$jd}\n";
echo "格式化犹太历: {$formatted_date}\n";
echo "对应公历: {$gregorian_date}";

输出结果:

儒略日: 2460204
格式化犹太历: 1/1/5784 (אלול יד תשס)
对应公历: 9/25/2023

计算犹太节日

// 计算重要犹太节日的日期
function get_jewish_holidays($jewish_year) {
    $holidays = [];

    // 以提斯利月1日(犹太新年)为基准
    $jd_rosh_hashanah = jewishtojd(1, 1, $jewish_year);

    // 重要节日相对犹太新年的天数
    $holiday_offsets = [
        "犹太新年" => 0,
        "赎罪日" => 9,
        "住棚节" => 14,
        "圣会节" => 21,
        "诵经节" => 22
    ];

    foreach ($holiday_offsets as $holiday => $offset) {
        $jd_holiday = $jd_rosh_hashanah + $offset;
        $gregorian_date = jdtogregorian($jd_holiday);
        $holidays[$holiday] = $gregorian_date;
    }

    return $holidays;
}

// 获取5784年的犹太节日
$holidays = get_jewish_holidays(5784);
echo "犹太历5784年重要节日:\n";
foreach ($holidays as $holiday => $date) {
    echo "{$holiday}: {$date}\n";
}

输出结果:

犹太历5784年重要节日:
犹太新年: 9/25/2023
赎罪日: 10/4/2023
住棚节: 10/9/2023
圣会节: 10/16/2023
诵经节: 10/17/2023

技术细节

返回值: 返回犹太历日期字符串(格式:月/日/年)
PHP 版本: 4.0+
依赖扩展: 需要启用Calendar扩展
有效范围: 儒略日范围对应犹太历年份1-9999

注意事项

  • 需要确保PHP的Calendar扩展已启用
  • 返回的日期格式为 "月/日/年"
  • 犹太历是阴阳历,月份和年份长度不固定
  • 闰年有13个月,平年有12个月
  • 希伯来字符输出需要浏览器支持希伯来文字体
  • 格式化标志主要用于宗教文献的特定格式要求
  • 犹太历新年从提斯利月开始,但创世纪从尼散月开始

实际应用场景

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

  • 犹太宗教节日计算和日历
  • 犹太文化研究和历史研究
  • 多历法系统转换工具
  • 国际化网站和本地化应用
  • 宗教教育和学习工具
  • 家谱研究和历史文献整理

相关函数

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