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

如何不使用str_replace与日期数组,用PHP函数翻译日期星期并生成本地化月份?

最简PHP方案:生成未来12个月的本地化月份名称

直接利用IntlDateFormatter配合DateTime对象就能实现,完全不需要数组替换、str_replace或mktime,代码简洁且可靠:

// 初始化本地化格式化器,这里以法语为例,可替换为en_US等目标语言
$formatter = new IntlDateFormatter(
    'fr_FR',
    IntlDateFormatter::NONE,
    IntlDateFormatter::NONE,
    date_default_timezone_get(),
    IntlDateFormatter::GREGORIAN,
    'MMMM' // 格式化规则:完整月份名称
);

$currentDate = new DateTime();
$next12Months = [];

for ($i = 0; $i < 12; $i++) {
    // 直接格式化当前DateTime对象的月份名称
    $next12Months[] = $formatter->format($currentDate);
    // 月份+1,自动处理跨年
    $currentDate->modify('+1 month');
}

// 输出结果
print_r($next12Months);

方案优势

  • 无需手动维护月份名称数组,本地化逻辑完全由IntlDateFormatter处理,支持所有PHP国际化扩展支持的语言
  • 利用DateTime的modify方法直接递推月份,自动处理跨年、不同月份天数等边界情况,比手动计算时间戳更省心
  • 代码逻辑清晰,没有冗余的字符串替换或时间戳转换步骤

备选方案(无Intl扩展时)

如果服务器未安装Intl扩展,可以用setlocale配合strftime,但注意setlocale的效果依赖系统已安装的语言包:

// 设置本地化环境,以法语为例
setlocale(LC_TIME, 'fr_FR.UTF-8');

$currentDate = new DateTime();
$next12Months = [];

for ($i = 0; $i < 12; $i++) {
    $next12Months[] = strftime('%B', $currentDate->getTimestamp());
    $currentDate->modify('+1 month');
}

print_r($next12Months);

注意:strftime在PHP 8.1+中已被标记为过时,优先推荐使用IntlDateFormatter方案。

内容的提问来源于stack exchange,提问作者imagIne

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 00:52:20