使用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
相关产品推荐
相关产品推荐

