PHP将UTC格式英文日期转换为法语日期不生效如何解决
解决方法
1. 修正日期转换函数用法
你当前代码存在两个核心错误:
date()函数本身不读取setlocale的本地化配置,永远返回英文日期strftime()的用法完全错误,第一个参数需要传入本地化日期格式符,而不是date()的返回结果,且原代码存在语法括号缺失问题。
修正后的基础代码示例:
// 先确认UTC日期转时间戳正确 $timestamp = strtotime($date); // strftime 第一个参数传格式符,%d是日期,%B是本地化完整月份名,%Y是四位年份 $date_fr = strftime('%d %B %Y', $timestamp);
2. 适配Mac系统的locale命名规则
Mac系统的本地化包命名与Linux不一致,你当前setlocale传入的参数很多不符合Mac的命名规则:
- 先打开终端执行命令
locale -a | grep fr,查看系统已安装的法语本地化包完整名称,通常Mac下法语UTF-8版本的包名为fr_FR.UTF-8 - 把该准确名称放在
setlocale参数的最前面,示例:
setlocale(LC_TIME, 'fr_FR.UTF-8', 'fr', 'fr_FR', 'fr_FR@euro', 'fr_FR.utf8', 'fr-FR', 'fra'); date_default_timezone_set('Europe/Paris');
3. 更稳定的跨平台替代方案(推荐)
setlocale依赖系统安装的本地化包,不同环境兼容性差,推荐使用PHP内置的IntlDateFormatter扩展(MAMP默认已开启,未开启的话在php.ini里启用intl扩展即可),无需依赖系统locale配置,直接输出指定语言的日期:
$timestamp = strtotime($date); $formatter = new IntlDateFormatter( 'fr_FR', IntlDateFormatter::NONE, IntlDateFormatter::NONE, 'Europe/Paris', IntlDateFormatter::GREGORIAN, 'dd MMMM yyyy' ); $date_fr = $formatter->format($timestamp);
该方法可以100%输出法语日期,不受系统环境影响。
内容的提问来源于stack exchange,提问作者Eric BUTTIGIEG
相关产品推荐
相关产品推荐

