You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 02:15:04