jewishtojd() 函数用于将犹太历(Jewish Calendar)日期转换为儒略日数。
这个函数是 jdtojewish() 的反向操作,在犹太文化研究、宗教节日计算和历史日期转换中非常有用。犹太历是犹太人使用的传统历法,基于月球周期和太阳年调整。
jewishtojd(int $month, int $day, int $year): int
| 参数 | 描述 |
|---|---|
| month | 必需。指定犹太历的月份,范围1-13(闰年有13个月) |
| day | 必需。指定犹太历的天数,范围1-30 |
| year | 必需。指定犹太历的年份,范围1-9999 |
返回一个整数,表示指定犹太历日期对应的儒略日数。如果参数无效,返回0。
犹太历特点:
| 月份编号 | 英文名称 | 中文含义 |
|---|---|---|
| 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 | 厄路耳月 |
// 将犹太历5760年4月23日转换为儒略日
$jd = jewishtojd(4, 23, 5760);
echo "犹太历5760年4月23日的儒略日: " . $jd;
输出结果:
犹太历5760年4月23日的儒略日: 2451545
// 完整的犹太历转换流程
$jewish_month = 4;
$jewish_day = 23;
$jewish_year = 5760;
// 转换为儒略日
$jd = jewishtojd($jewish_month, $jewish_day, $jewish_year);
echo "原始犹太历日期: {$jewish_month}/{$jewish_day}/{$jewish_year}\n";
echo "儒略日: {$jd}\n";
// 转换回犹太历日期
$converted_date = jdtojewish($jd);
echo "转换回犹太历: {$converted_date}";
// 验证是否一致
if ($converted_date === "{$jewish_month}/{$jewish_day}/{$jewish_year}") {
echo "\n转换验证: 成功";
} else {
echo "\n转换验证: 失败";
}
输出结果:
原始犹太历日期: 4/23/5760
儒略日: 2451545
转换回犹太历: 4/23/5760
转换验证: 成功
// 转换重要犹太节日的儒略日
$jewish_holidays = [
"犹太新年5784" => [1, 1, 5784],
"赎罪日5784" => [1, 10, 5784],
"住棚节5784" => [1, 15, 5784],
"光明节5784" => [3, 25, 5784],
"普珥节5784" => [7, 14, 5784]
];
foreach ($jewish_holidays as $holiday => $date) {
list($month, $day, $year) = $date;
$jd = jewishtojd($month, $day, $year);
$gregorian_date = jdtogregorian($jd);
echo "{$holiday}:\n";
echo " 犹太历: {$month}/{$day}/{$year}\n";
echo " 儒略日: {$jd}\n";
echo " 公历: {$gregorian_date}\n\n";
}
输出结果:
犹太新年5784:
犹太历: 1/1/5784
儒略日: 2460204
公历: 9/25/2023
赎罪日5784:
犹太历: 1/10/5784
儒略日: 2460213
公历: 10/4/2023
住棚节5784:
犹太历: 1/15/5784
儒略日: 2460218
公历: 10/9/2023
光明节5784:
犹太历: 3/25/5784
儒略日: 2460305
公历: 12/25/2023
普珥节5784:
犹太历: 7/14/5784
儒略日: 2460408
公历: 3/23/2024
// 处理犹太历闰年(有13个月)
function is_jewish_leap_year($jewish_year) {
// 犹太历闰年规则:19年周期中的第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 $test) {
list($year, $type) = $test;
$is_leap = is_jewish_leap_year($year);
echo "犹太历{$year}年 ({$type}):\n";
// 测试阿达尔月的转换
if ($is_leap) {
// 闰年有阿达尔一月和阿达尔二月
$jd_adar1 = jewishtojd(7, 1, $year);
$jd_adar2 = jewishtojd(8, 1, $year);
echo " 阿达尔一月1日: 儒略日 {$jd_adar1}\n";
echo " 阿达尔二月1日: 儒略日 {$jd_adar2}\n";
} else {
// 平年只有阿达尔月
$jd_adar = jewishtojd(6, 1, $year);
echo " 阿达尔月1日: 儒略日 {$jd_adar}\n";
}
echo "\n";
}
输出结果:
犹太历5782年 (平年):
阿达尔月1日: 儒略日 2459612
犹太历5783年 (闰年):
阿达尔一月1日: 儒略日 2459973
阿达尔二月1日: 儒略日 2460003
犹太历5784年 (平年):
阿达尔月1日: 儒略日 2460354
犹太历5785年 (闰年):
阿达尔一月1日: 儒略日 2460715
阿达尔二月1日: 儒略日 2460745
// 验证犹太历日期的有效性
function validate_jewish_date($month, $day, $year) {
// 检查年份范围
if ($year < 1 || $year > 9999) {
return "年份超出范围(1-9999)";
}
// 检查月份范围
$max_month = 14; // 厄路耳月
if ($month < 1 || $month > $max_month) {
return "月份超出范围(1-{$max_month})";
}
// 检查闰年
$is_leap = in_array($year % 19, [0, 3, 6, 8, 11, 14, 17]);
// 调整月份有效性检查
if (!$is_leap && $month >= 7) {
$month--; // 平年中跳过阿达尔一月
}
// 检查天数范围
if ($day < 1 || $day > 30) {
return "天数超出范围(1-30)";
}
// 尝试转换
$jd = jewishtojd($month, $day, $year);
if ($jd == 0) {
return "无效的犹太历日期";
}
return "有效的犹太历日期,儒略日: " . $jd;
}
// 测试验证函数
echo validate_jewish_date(1, 1, 5784) . "\n";
echo validate_jewish_date(7, 1, 5783) . "\n"; // 闰年的阿达尔一月
echo validate_jewish_date(7, 1, 5784) . "\n"; // 平年的阿达尔一月(无效)
echo validate_jewish_date(15, 1, 5784) . "\n"; // 无效月份
输出结果:
有效的犹太历日期,儒略日: 2460204
有效的犹太历日期,儒略日: 2459973
无效的犹太历日期
月份超出范围(1-14)
// 计算犹太历日期对应的公历日期范围
function get_jewish_year_range($jewish_year) {
$start_jd = jewishtojd(1, 1, $jewish_year); // 犹太新年
$end_jd = jewishtojd(1, 1, $jewish_year + 1) - 1; // 下个犹太新年前一天
$start_gregorian = jdtogregorian($start_jd);
$end_gregorian = jdtogregorian($end_jd);
return [
'jewish_year' => $jewish_year,
'start_jd' => $start_jd,
'end_jd' => $end_jd,
'start_gregorian' => $start_gregorian,
'end_gregorian' => $end_gregorian,
'days_in_year' => $end_jd - $start_jd + 1
];
}
// 获取几个犹太历年份的范围
$years = [5780, 5781, 5782, 5783, 5784];
echo "犹太历年份对应的公历日期范围:\n";
foreach ($years as $year) {
$range = get_jewish_year_range($year);
echo "犹太历{$year}年:\n";
echo " 公历范围: {$range['start_gregorian']} 到 {$range['end_gregorian']}\n";
echo " 天数: {$range['days_in_year']}天\n";
echo " 儒略日范围: {$range['start_jd']} 到 {$range['end_jd']}\n\n";
}
输出结果:
犹太历年份对应的公历日期范围:
犹太历5780年:
公历范围: 9/9/2019 到 9/27/2020
天数: 385天
儒略日范围: 2458741 到 2459125
犹太历5781年:
公历范围: 9/28/2020 到 9/16/2021
天数: 354天
儒略日范围: 2459126 到 2459479
犹太历5782年:
公历范围: 9/17/2021 到 9/5/2022
天数: 354天
儒略日范围: 2459480 到 2459833
犹太历5783年:
公历范围: 9/6/2022 到 9/24/2023
天数: 384天
儒略日范围: 2459834 到 2460217
犹太历5784年:
公历范围: 9/25/2023 到 9/12/2024
天数: 354天
儒略日范围: 2460218 到 2460571
// 创建犹太历工具类
class JewishCalendar {
public static function isLeapYear($year) {
return in_array($year % 19, [0, 3, 6, 8, 11, 14, 17]);
}
public static function getMonthName($month, $is_leap = false) {
$months = [
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'
];
// 调整平年的月份名称
if (!$is_leap && $month >= 7) {
$month--;
}
return $months[$month] ?? 'Unknown';
}
public static function convertToGregorian($jewish_month, $jewish_day, $jewish_year) {
$jd = jewishtojd($jewish_month, $jewish_day, $jewish_year);
return jdtogregorian($jd);
}
public static function getHolidays($year) {
$holidays = [];
$is_leap = self::isLeapYear($year);
// 主要节日的月份和日期
$major_holidays = [
'Rosh Hashanah' => [1, 1],
'Yom Kippur' => [1, 10],
'Sukkot' => [1, 15],
'Simchat Torah' => [1, 22],
'Hanukkah' => [$is_leap ? 8 : 7, 25], // 光明节在阿达尔月
'Purim' => [$is_leap ? 8 : 6, 14] // 普珥节在阿达尔月
];
foreach ($major_holidays as $name => $date) {
list($month, $day) = $date;
$gregorian_date = self::convertToGregorian($month, $day, $year);
$holidays[$name] = $gregorian_date;
}
return $holidays;
}
}
// 使用工具类
$year = 5784;
$is_leap = JewishCalendar::isLeapYear($year);
$holidays = JewishCalendar::getHolidays($year);
echo "犹太历{$year}年信息:\n";
echo "是否为闰年: " . ($is_leap ? "是" : "否") . "\n\n";
echo "主要节日日期:\n";
foreach ($holidays as $holiday => $date) {
echo "{$holiday}: {$date}\n";
}
输出结果:
犹太历5784年信息:
是否为闰年: 否
主要节日日期:
Rosh Hashanah: 9/25/2023
Yom Kippur: 10/4/2023
Sukkot: 10/9/2023
Simchat Torah: 10/16/2023
Hanukkah: 12/25/2023
Purim: 3/23/2024
| 返回值: | 返回犹太历日期对应的儒略日数(整数) |
|---|---|
| PHP 版本: | 4.0+ |
| 依赖扩展: | 需要启用Calendar扩展 |
| 有效范围: | 年份:1-9999,月份:1-14,天数:1-30 |
jewishtojd() 函数在以下场景中特别有用:
jdtojewish() - 将儒略日数转换为犹太历日期juliantojd() - 将儒略历日期转换为儒略日数gregoriantojd() - 将公历日期转换为儒略日数jdtogregorian() - 将儒略日数转换为公历日期cal_from_jd() - 将儒略日数转换为各种日历日期jdmonthname() - 返回儒略日数的月份名称