【发布时间】:2016-11-05 15:55:09
【问题描述】:
我在 FreeBSD 10.1 和 nginx 上运行 PHP 7.0.8 (FPM)。我需要以用户所在国家/地区的首选格式显示时间。
setlocale(LC_ALL, "ru_RU.UTF-8");
date_default_timezone_set("Europe/Moscow");
echo strftime('%X', time());
// Returns 21:23:12 (correct) because 24-hr format is preferred in Russia.
setlocale(LC_ALL, "en_US.UTF-8");
date_default_timezone_set("America/New_York");
echo strftime('%X', time());
// Returns 21:23:12 (incorrect) must return 9:23:12 pm as preferred format in U.S.
这似乎是我的服务器或 PHP 版本的问题,因为 其他用户得到了正确的结果。
locale -a return 包含 ru_RU.UTF-8 和 en_US.UTF-8。
echo setlocale(LC_ALL, "en_US.UTF-8") 返回正确的语言环境。
没有应用特殊配置。
请帮我解决这个问题。谢谢。
%X 基于区域设置的首选时间表示,不带日期
附:首选日期%x 可以正确显示俄罗斯的 dd.mm.yyyy 和美国的 mm/dd/yyyy
【问题讨论】:
-
在这里工作:ideone.com/c1fGzZ
-
在我的服务器上不起作用,完全相同的脚本。我在 FreeBSD 10.1 上有 php70-7.0.8。
locale -a返回安装的完全相同的语言环境。 -
echo setlocale(LC_ALL, "en_US.UTF-8")返回正确的语言环境。 -
这一定是服务器的问题
-
但
setlocale不会返回 false(如果检测到任何类型的错误配置或错误)。
标签: php locale freebsd strftime