packagist api 的 time 字段最接近“发布时间”,源自 git tag 时间;可用 curl + jq、浏览器访问 json、或 composer show --all 查看,但该时间不等于 github 时间或代码修改时间。

Composer 本身不提供包的“更新日期”或“发布时间”字段,composer show 和 Packagist API 返回的都是版本发布时的 time(即 tag 创建时间),不是维护者修改代码、推送新 commit 或重新发布的时间。
如何查某个包最新版的发布时间(实际可行的方法)
Packagist 是 Composer 默认元数据源,它的 JSON API 直接暴露了每个版本的 time 字段,这个值来自 Git tag 的 annotated commit 时间(如果 tag 有注释)或 lightweight tag 的创建时间。它最接近用户理解的“发布日期”。
实操建议:
- 用
curl -s https://packagist.org/packages/vendor/package-name.json | jq '.package.versions["dev-main"]?.time // .package.versions["v2.3.0"]?.time'(需安装jq)快速提取指定版本时间 - 直接浏览器访问
https://packagist.org/packages/vlucas/phpdotenv.json,搜索"time"查看各版本发布时间 - 在终端执行
composer show vlucas/phpdotenv --all,输出中每行版本号后括号里的日期,就是该版本的time值(但不显示完整 ISO 时间)
composer show 显示的日期为什么和 GitHub 上的不一致?
因为 composer show 拿的是 Packagist 同步时记录的 time,而 GitHub 页面显示的是:git push 时间、tag 创建时间、或 release 页面手动编辑时间 —— 三者可能完全不同。
常见错误现象:
- 维护者删掉旧 tag 再重推,Packagist 不会自动更新
time,除非触发重新抓取(如提交新版本) - 包使用
dev-main这类开发分支,其time是 Packagist 最近一次扫描该分支 HEAD 的时间,不是代码修改时间 - 有些包未打 tag,只靠
composer.json的version字段硬编码,此时time字段为空或不可靠
想查某次 commit 是否已包含在某个版本里?别依赖发布时间
发布时间不能反映代码变更范围。真正要确认一个 fix 是否可用,唯一可靠方式是比对 commit hash。
实操建议:
- 用
git log --oneline v2.2.0..v2.3.0看两个版本间新增的 commit - 进包的 GitHub 仓库,打开
/compare/v2.2.0...v2.3.0页面直观查看差异 - 在本地
vendor/package-name目录下运行git describe --always,确认当前加载的确实是预期版本
时间字段本质是元数据快照,不是审计日志。如果你需要精确追踪改动引入点,得回到 Git 本身,而不是依赖 Composer 或 Packagist 的发布时间。










