【发布时间】:2014-03-26 15:35:59
【问题描述】:
我正在维护 PHP 代码,这似乎很糟糕地搞乱了日期/时间处理。特别是此应用程序在其他语言环境中无法正常运行。
其中一个问题是使用不可本地化的date() 函数而不是strftime() 函数。它在函数内部使用了好几层,这些函数实际上被使用了数千次,并且到处都有许多不同的格式字符串。
用strftime() 替换date() 会花费太多时间。相反,我正在寻找让strftime() 处理与date() 相同的格式字符串的方法,但找不到任何东西。是否有任何已知的解决方案可以将strftime() 与date() 格式字符串一起使用?
【问题讨论】:
-
你能举例说明你的日期输出需要是什么样子吗?
-
如果是“深几层”,
date生成的日期可能很适合内部使用;date毕竟是生成机器可读日期格式的好方法。如果日期需要以不同的方式呈现给用户,那无论如何都应该只发生在“外层”。长话短说:请提供更多示例值的详细信息。 -
您是否考虑过使用
sed在所有PHP 文件中查找和替换date()? -
它用于内部和显示使用,范围从转换为 Unix 时间戳到“2013 年 5 月 12 日 12:34”格式以在屏幕上使用。
-
这种方法的真正问题是 strftime() 在 PHP 8.1 中已被弃用,并将在 PHP 9 中删除。使用 DateTime 不是一个好的选择,因为它也忽略了语言环境并且只生成英文输出。此时唯一真正的解决方案是转换为使用 IntDateFormatter::format(),它确实使用与 date() 相同的格式字符串。它需要安装和启用 PHP 的 Intl 扩展,但我怀疑这将很快普遍可用,除非更改 DateTime 以响应语言环境。
标签: php date localization date-format strftime