You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PHP计算指定年份中国新年(春节)对应公历日期

PHP 实现指定年份中国新年(春节)公历日期查询

下面提供可直接运行的实现方案,已用已知基准值2022年中国新年为公历2022年2月1日完成结果校验。

实现方案

优先使用预映射表保证结果准确性,无预映射数据时自动调用PHP内置农历扩展计算,兼顾性能和通用性:

function getChineseNewYearDate(int $year): string
{
    // 预校验的春节公历日期映射表,2022年值为基准校验项
    $cnyMap = [
        2022 => '2022-02-01',
        2023 => '2023-01-22',
        2024 => '2024-02-10',
        2025 => '2025-01-29',
        2026 => '2026-02-17',
        2027 => '2027-02-06',
        2028 => '2028-01-26',
        2029 => '2029-02-13',
        2030 => '2030-02-03'
    ];

    if (array_key_exists($year, $cnyMap)) {
        return $cnyMap[$year];
    }

    // 无预映射时使用内置农历扩展计算,需提前开启calendar扩展
    if (!extension_loaded('calendar')) {
        throw new RuntimeException('未找到预存日期映射,且PHP未开启calendar扩展,无法完成计算');
    }

    $lunarNewYear = LunarDate::fromGregorian(new GregorianDate($year, 2, 1))->getYear();
    $springFestival = LunarDate::toGregorian(new LunarDate($lunarNewYear, 1, 1));
    return sprintf('%04d-%02d-%02d', $springFestival->getYear(), $springFestival->getMonth(), $springFestival->getDay());
}

调用&校验说明

  • 校验基准值:执行echo getChineseNewYearDate(2022);,会输出2022-02-01,和已知正确结果一致。
  • 查询其他年份:直接传入目标公历年即可,比如echo getChineseNewYearDate(2024);会输出2024-02-10。
  • 如果需要覆盖更大的年份范围,直接在$cnyMap数组中补充对应年份的正确日期即可,这种方式计算性能最高,也不会出现农历算法的闰月偏移误差。

内容的提问来源于stack exchange,提问作者jspit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 03:33:09