PHP date()函数格式化:实现带序数词的多语言日期显示
PHP实现瑞典语日期序数词格式化方案
PHP原生date()函数的S格式符仅支持英语序数词(st/nd/rd/th),无法直接生成瑞典语的日期序数格式(如1:e/2:a或完整序数词första/andra),必须手动处理序数部分,结合本地化工具实现目标格式。
核心实现思路
- 启用瑞典语本地化,获取符合语言习惯的星期、月份全称
- 根据日期数字映射对应的瑞典语序数后缀/完整词
- 拼接成目标格式字符串
方案一:使用IntlDateFormatter(推荐,跨环境兼容性更好)
// 设置时区 date_default_timezone_set('Europe/Stockholm'); // 初始化国际化日期格式化器,指定瑞典语区域 $locale = 'sv_SE'; $dateTime = new DateTime(); // 获取瑞典语星期、月份全称 $weekday = IntlDateFormatter::formatObject($dateTime, 'EEEE', $locale); $month = IntlDateFormatter::formatObject($dateTime, 'MMMM', $locale); // 获取日期数字及其他时间组件 $day = (int)$dateTime->format('j'); $year = $dateTime->format('Y'); $time = $dateTime->format('H:i:s'); // 映射瑞典语序数后缀 $suffix = match($day) { 1 => 'e', 2 => 'a', default => 'e' }; // 输出目标格式:Onsdagen den 4:e Maj 2023 kl 15:13:20 echo "$weekday den $day:$suffix $month $year kl $time";
方案二:简洁一行式(结合strftime)
date_default_timezone_set('Europe/Stockholm'); // 启用瑞典语本地化(需确保服务器已安装对应语言包) setlocale(LC_TIME, 'sv_SE.utf8'); $day = (int)date('j'); // 映射序数后缀,默认使用e $suffix = isset([1 => 'e', 2 => 'a'][$day]) ? [1 => 'e', 2 => 'a'][$day] : 'e'; // 输出目标格式 echo strftime("%A den $day:$suffix %B %Y kl %T");
扩展:使用完整序数词(如den första Maj)
如果需要显示完整的瑞典语序数词而非数字后缀,可扩展映射数组:
date_default_timezone_set('Europe/Stockholm'); $locale = 'sv_SE'; $dateTime = new DateTime(); $day = (int)$dateTime->format('j'); // 瑞典语日期完整序数词映射(可补充至31) $ordinalMap = [ 1 => 'första', 2 => 'andra', 3 => 'tredje', 4 => 'fjärde', 5 => 'femte', 6 => 'sjätte', 7 => 'sjunde', 8 => 'åttonde', 9 => 'nionde', 10 => 'tionde' ]; // 不存在映射时 fallback 到数字后缀格式 $ordinal = $ordinalMap[$day] ?? "$day:e"; $weekday = IntlDateFormatter::formatObject($dateTime, 'EEEE', $locale); $month = IntlDateFormatter::formatObject($dateTime, 'MMMM', $locale); echo "$weekday den $ordinal $month {$dateTime->format('Y')} kl {$dateTime->format('H:i:s')}";
内容的提问来源于stack exchange,提问作者Learning WooStoreFront
相关产品推荐
相关产品推荐

