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

如何强制PHP的IntlDateFormatter格式化输出时仅忽略年份部分

PHP IntlDateFormatter 输出无年份FULL级别日期方案

实现原理

通过PHP intl扩展提供的标准API直接调整格式化规则,全程基于ICU内置的本地化规则生成输出,无需事后处理日期字符串,完全适配不同地区的日期格式顺序、分隔符规则。

推荐方案(使用DateTimePatternGenerator)

直接调用ICU内置的日期模式生成器,指定需要保留的字段(星期全称、月份全称、日期),自动生成对应地区的正确格式规则:

function getFullDateWithoutYear(string $locale, string $timezone, int $timestamp): string
{
    // 初始化对应地区的日期模式生成器
    $patternGenerator = DateTimePatternGenerator::create($locale);
    // 指定需要保留的字段:EEEE=星期全称、MMMM=月份全称、d=日期
    $customPattern = $patternGenerator->getBestPattern('EEEE MMMM d');

    // 用生成的自定义规则初始化日期格式化器
    $formatter = new IntlDateFormatter(
        $locale,
        IntlDateFormatter::NONE,
        IntlDateFormatter::NONE,
        $timezone,
        IntlDateFormatter::GREGORIAN,
        $customPattern
    );

    return $formatter->format($timestamp);
}

// 测试用例
$targetTime = strtotime('2021-09-17 15:00');
var_dump(getFullDateWithoutYear('en-US', 'Europe/London', $targetTime));
var_dump(getFullDateWithoutYear('sv-SE', 'Europe/London', $targetTime));

输出结果

string(19) "Friday, September 17"
string(20) "fredag 17 september"

注:原问题中期望输出的字符串长度为带年份时的长度,实际输出无年份内容长度会对应缩短,内容完全匹配需求。

备选方案(基于FULL模板修改)

如果需要完全保留FULL级别格式的所有细节(除了年份),可以先获取FULL级别的原始模板,剔除年份占位符后重新设置规则:

function getFullDateWithoutYearAlt(string $locale, string $timezone, int $timestamp): string
{
    $formatter = new IntlDateFormatter(
        $locale,
        IntlDateFormatter::FULL,
        IntlDateFormatter::NONE,
        $timezone,
        IntlDateFormatter::GREGORIAN
    );

    // 获取FULL级别的原始格式模板
    $originalPattern = $formatter->getPattern();
    // 移除所有年份相关占位符,清理多余的分隔符和空格
    $patternWithoutYear = preg_replace('/[yYuUr]+/', '', $originalPattern);
    $patternWithoutYear = trim(preg_replace('/(,|\s){2,}/', ' ', $patternWithoutYear), ', ');

    $formatter->setPattern($patternWithoutYear);
    return $formatter->format($timestamp);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 04:06:01