PHP jddayofweek() 函数

定义和用法

jddayofweek() 函数用于返回指定儒略日数对应的星期几信息。

这个函数可以根据不同的模式返回星期几的数字、英文名称或缩写,在日期处理、日历应用和历史日期分析中非常有用。

语法

jddayofweek(int $julian_day, int $mode = CAL_DOW_DAYNO): mixed
参数 描述
julian_day 必需。指定儒略日数
mode 可选。指定返回值的模式,默认为 CAL_DOW_DAYNO(返回数字)

返回值

根据指定的模式返回星期几信息:

  • 数字(0=周日,1=周一,...,6=周六)
  • 英文缩写(Sun, Mon, ...)
  • 英文全称(Sunday, Monday, ...)

模式常量

常量 描述
CAL_DOW_DAYNO 0 返回星期几的数字(0-6)
CAL_DOW_SHORT 1 返回星期几的英文缩写(3字母)
CAL_DOW_LONG 2 返回星期几的英文全称

星期对照表

数字 英文全称 英文缩写 中文
0SundaySun星期日
1MondayMon星期一
2TuesdayTue星期二
3WednesdayWed星期三
4ThursdayThu星期四
5FridayFri星期五
6SaturdaySat星期六

实例演示

基本用法 - 获取星期几数字

// 获取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=周六

注意事项

  • 需要确保PHP的Calendar扩展已启用
  • 星期数字从0开始(0=周日)
  • 返回的星期名称是英文的
  • 对于历史日期,计算结果可能因历法变更而不同
  • 儒略日数必须是有效的整数
  • 模式参数是可选的,默认为CAL_DOW_DAYNO

实际应用场景

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

  • 日历应用和日期选择器
  • 历史日期分析和研究
  • 节假日和纪念日计算
  • 日期验证和格式化工具
  • 多语言网站和国际日期显示
  • 数据分析和报表生成

相关函数

  • jdmonthname() - 返回儒略日数的月份名称
  • gregoriantojd() - 将公历日期转换为儒略日数
  • jdtogregorian() - 将儒略日数转换为公历日期
  • cal_to_jd() - 将各种日历日期转换为儒略日数
  • date() - 格式化本地时间/日期
  • strftime() - 根据区域设置格式化本地时间/日期