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

PHP日期格式设置求助:无法生成指定格式的日期

解决PHP日期格式化为Wednesday, May 16th的问题

嘿,我来帮你搞定这个日期格式的需求!要输出类似Wednesday, May 16th这种带序数词后缀(st/nd/rd/th)的日期,PHP内置的date()函数没法直接生成序数词,不过咱们可以通过自定义逻辑轻松实现,下面给你两种靠谱的方案:

方法一:DateTime类+自定义序数词函数(推荐)

这种方法兼容性好,逻辑清晰,还能灵活调整格式:

// 生成序数词后缀的辅助函数
function getOrdinalSuffix($day) {
    // 11、12、13是特殊情况,统一用th
    if ($day >= 11 && $day <= 13) {
        return 'th';
    }
    // 根据日数最后一位判断后缀
    switch ($day % 10) {
        case 1: return 'st';
        case 2: return 'nd';
        case 3: return 'rd';
        default: return 'th';
    }
}

// 获取当前日期
$currentDate = new DateTime();
// 提取不带前导零的日数
$dayNumber = $currentDate->format('j');
// 获取对应的序数词后缀
$ordinal = getOrdinalSuffix($dayNumber);

// 拼接成目标格式:星期全称, 月份全称 日数+后缀
$formattedDate = $currentDate->format('l, F') . " {$dayNumber}{$ordinal}";

// 输出结果
echo $formattedDate;

代码说明:

  • l(小写L):输出完整的星期名称(比如Wednesday)
  • F:输出完整的月份名称(比如May)
  • j:输出不带前导零的日数(比如16而非06)
  • 辅助函数专门处理序数词的特殊情况,确保所有日数都能得到正确的后缀

方法二:利用IntlDateFormatter(需开启intl扩展)

如果你的服务器开启了intl扩展,也可以用国际化日期格式化工具来实现,不过需要设置对应的本地化规则:

$formatter = new IntlDateFormatter(
    'en_US',
    IntlDateFormatter::FULL,
    IntlDateFormatter::NONE,
    date_default_timezone_get(),
    IntlDateFormatter::GREGORIAN,
    'EEEE, MMMM d'
);

$date = new DateTime();
$baseDate = $formatter->format($date);
// 同样需要添加序数词后缀,这里可以复用上面的getOrdinalSuffix函数
$dayNumber = $date->format('j');
$ordinal = getOrdinalSuffix($dayNumber);

$formattedDate = str_replace($dayNumber, "{$dayNumber}{$ordinal}", $baseDate);
echo $formattedDate;

这个方法适合需要多语言支持的场景,但依赖intl扩展,所以如果服务器没开启的话,还是第一种方法更稳妥。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:09:42