jddayofweek() 函数用于返回指定儒略日数对应的星期几信息。
这个函数可以根据不同的模式返回星期几的数字、英文名称或缩写,在日期处理、日历应用和历史日期分析中非常有用。
jddayofweek(int $julian_day, int $mode = CAL_DOW_DAYNO): mixed
| 参数 | 描述 |
|---|---|
| julian_day | 必需。指定儒略日数 |
| mode | 可选。指定返回值的模式,默认为 CAL_DOW_DAYNO(返回数字) |
根据指定的模式返回星期几信息:
| 常量 | 值 | 描述 |
|---|---|---|
| CAL_DOW_DAYNO | 0 | 返回星期几的数字(0-6) |
| CAL_DOW_SHORT | 1 | 返回星期几的英文缩写(3字母) |
| CAL_DOW_LONG | 2 | 返回星期几的英文全称 |
| 数字 | 英文全称 | 英文缩写 | 中文 |
|---|---|---|---|
| 0 | Sunday | Sun | 星期日 |
| 1 | Monday | Mon | 星期一 |
| 2 | Tuesday | Tue | 星期二 |
| 3 | Wednesday | Wed | 星期三 |
| 4 | Thursday | Thu | 星期四 |
| 5 | Friday | Fri | 星期五 |
| 6 | Saturday | Sat | 星期六 |
// 获取2000年1月1日的星期几(默认模式)
$jd = gregoriantojd(1, 1, 2000);
$day_of_week = jddayofweek($jd);
echo "2000年1月1日是星期: " . $day_of_week;
输出结果:
2000年1月1日是星期: 6
// 使用不同模式获取星期信息
$jd = gregoriantojd(1, 1, 2000);
$number = jddayofweek($jd, CAL_DOW_DAYNO);
$short = jddayofweek($jd, CAL_DOW_SHORT);
$long = jddayofweek($jd, CAL_DOW_LONG);
echo "数字模式: {$number}\n";
echo "缩写模式: {$short}\n";
echo "全称模式: {$long}";
输出结果:
数字模式: 6
缩写模式: Sat
全称模式: Saturday
// 获取重要历史事件发生在星期几
$historical_dates = [
"美国独立宣言" => [7, 4, 1776],
"人类首次登月" => [7, 20, 1969],
"柏林墙倒塌" => [11, 9, 1989],
"互联网诞生" => [1, 1, 1983],
"911事件" => [9, 11, 2001]
];
foreach ($historical_dates as $event => $date) {
list($month, $day, $year) = $date;
$jd = gregoriantojd($month, $day, $year);
$weekday = jddayofweek($jd, CAL_DOW_LONG);
echo "{$event} ({$year}-{$month}-{$day}): {$weekday}\n";
}
输出结果:
美国独立宣言 (1776-7-4): Thursday
人类首次登月 (1969-7-20): Sunday
柏林墙倒塌 (1989-11-9): Thursday
互联网诞生 (1983-1-1): Saturday
911事件 (2001-9-11): Tuesday
// 计算未来某个日期的星期几
$target_date = "2030-01-01";
list($year, $month, $day) = explode('-', $target_date);
$jd = gregoriantojd($month, $day, $year);
$weekday = jddayofweek($jd, CAL_DOW_LONG);
echo "{$target_date} 是: {$weekday}";
输出结果:
2030-01-01 是: Tuesday
// 创建通用的星期几获取函数
function get_weekday_info($month, $day, $year) {
$jd = gregoriantojd($month, $day, $year);
return [
'number' => jddayofweek($jd, CAL_DOW_DAYNO),
'short' => jddayofweek($jd, CAL_DOW_SHORT),
'long' => jddayofweek($jd, CAL_DOW_LONG),
'chinese' => ['日', '一', '二', '三', '四', '五', '六'][jddayofweek($jd, CAL_DOW_DAYNO)]
];
}
// 使用函数获取信息
$info = get_weekday_info(12, 25, 2023);
echo "2023年圣诞节:\n";
echo "数字: {$info['number']}\n";
echo "英文缩写: {$info['short']}\n";
echo "英文全称: {$info['long']}\n";
echo "中文: 星期{$info['chinese']}";
输出结果:
2023年圣诞节:
数字: 1
英文缩写: Mon
英文全称: Monday
中文: 星期一
// 验证jddayofweek与date函数的一致性
$test_dates = [
[1, 1, 2000],
[7, 4, 1776],
[12, 25, 2023],
[2, 29, 2020]
];
foreach ($test_dates as $date) {
list($month, $day, $year) = $date;
$jd = gregoriantojd($month, $day, $year);
// 使用jddayofweek
$jd_weekday = jddayofweek($jd, CAL_DOW_LONG);
// 使用date函数验证
$timestamp = mktime(0, 0, 0, $month, $day, $year);
$date_weekday = date('l', $timestamp);
echo "日期: {$year}-{$month}-{$day}\n";
echo "jddayofweek: {$jd_weekday}\n";
echo "date函数: {$date_weekday}\n";
echo "结果: " . ($jd_weekday === $date_weekday ? "一致" : "不一致") . "\n\n";
}
输出结果:
日期: 2000-1-1
jddayofweek: Saturday
date函数: Saturday
结果: 一致
日期: 1776-7-4
jddayofweek: Thursday
date函数: Thursday
结果: 一致
日期: 2023-12-25
jddayofweek: Monday
date函数: Monday
结果: 一致
日期: 2020-2-29
jddayofweek: Saturday
date函数: Saturday
结果: 一致
| 返回值: | 根据模式返回星期几信息(数字、字符串) |
|---|---|
| PHP 版本: | 4.0+ |
| 依赖扩展: | 需要启用Calendar扩展 |
| 星期定义: | 0=周日,1=周一,...,6=周六 |
jddayofweek() 函数在以下场景中特别有用:
jdmonthname() - 返回儒略日数的月份名称gregoriantojd() - 将公历日期转换为儒略日数jdtogregorian() - 将儒略日数转换为公历日期cal_to_jd() - 将各种日历日期转换为儒略日数date() - 格式化本地时间/日期strftime() - 根据区域设置格式化本地时间/日期