phpenv 默认未启用 calendar 扩展,需手动开启:先通过 phpinfo() 确认是否编译支持,若无则推荐替换为官方 php 二进制包并取消 php.ini 中 extension=calendar 注释;启用后需注意日期合法性校验、locale 设置、年份范围限制及儒略日偏移问题。

phpEnv 默认不启用 calendar 扩展,需手动开启
phpEnv 是 Windows 下流行的 PHP 集成环境(基于 WAMP 架构),但它默认编译时未启用 --enable-calendar,所以所有 cal_*、gregoriantojd()、jdtogregorian() 等函数都会报 Call to undefined function 错误。这不是你代码写错了,是扩展根本没加载。
确认 calendar 扩展是否已编译进 PHP
在 phpEnv 控制面板中打开「PHP 版本管理」→ 选中当前使用的 PHP 版本 → 点击「phpinfo()」查看页面。搜索 calendar:
- 如果看到
calendar support => enabled,说明已内置,只需检查php.ini中是否被注释 - 如果完全搜不到 calendar 相关字段,说明该 PHP 版本未编译 calendar 支持 —— 这是 phpEnv 的常见情况,尤其 PHP 7.4+ 和 8.x 版本
注意:Windows 下的 PHP 官方二进制包自带 calendar,但 phpEnv 自带的精简版常剔除了它。
启用 calendar 的两种可行路径
路径一(推荐):替换为官方 PHP 二进制包
- 去 windows.php.net/download 下载对应版本的 Thread Safe (TS) ZIP 包(如
php-8.2.22-Win32-vs16-x64.zip) - 解压后,将
php.ini-development重命名为php.ini,取消注释行:extension=calendar - 在 phpEnv 中「添加 PHP 版本」→ 指向该解压目录 → 设为默认
- 重启 Apache,
phpinfo()应显示 calendar enabled
路径二(不推荐):自行编译(仅限有 VS 工具链的开发者)
- 需完整安装 Visual Studio + Windows SDK + CMake
- 下载 PHP 源码,执行
buildconf后配置--enable-calendar - 编译耗时长,且 phpEnv 的 Apache 模块兼容性难保证
启用后仍报错的典型陷阱
即使 extension 已加载,以下情况仍会导致函数不可用:
-
cal_to_jd(CAL_GREGORIAN, 2, 30, 2025)会返回 0(非法日期),不是错误,但后续cal_from_jd(0, CAL_GREGORIAN)结果不可信 —— 必须校验输入合法性 -
jdmonthname()返回的月份名默认是英文,中文环境下需配合setlocale(LC_TIME, 'zh_CN.UTF-8'),否则显示January而非一月 -
easter_date()仅支持 1970–2037 年(Unix 时间戳范围),传入2050会返回false,应改用easter_days()+ 手动计算 - 儒略日计数(Julian Day Count)起始是公元前 4713 年 1 月 1 日中午,不是午夜 —— 所有
unixtojd()/jdtounix()转换都隐含 12 小时偏移,跨日逻辑要格外小心
真正麻烦的从来不是“怎么开”,而是开了之后,cal_from_jd() 返回的数组字段名(date、month、day)和 date() 函数不一致,混用容易出错。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











