PHP将MySQL日期转为瑞典语月份时遇DateTimeInterface错误
解决MySQL日期转瑞典语格式的问题
错误原因
你遇到的DateTimeInterface错误,核心原因是**DateTime::format()方法不遵循系统区域设置**——它只识别PHP内置的格式字符,不会因setlocale()的设置改变月份/日期的语言,直接混用自然会出问题。下面是两种可靠的解决方法:
方法一:依赖系统区域包(setlocale + strftime)
- 先确认服务器已安装瑞典语区域包:
- Ubuntu/Debian:安装
language-pack-sv - CentOS/RHEL:安装
glibc-langpack-sv
- Ubuntu/Debian:安装
- 代码实现:
// 设置瑞典语区域(不同系统写法可能有差异,优先带utf8的版本) setlocale(LC_TIME, 'sv_SE.utf8', 'sv_SE', 'swedish'); // 从MySQL获取的日期字符串 $mysqlDate = '2024-05-28'; // 转时间戳后用strftime格式化 $timestamp = strtotime($mysqlDate); $swedishDate = strftime('%d %b %Y', $timestamp); echo $swedishDate; // 输出:28 Maj 2024
可以用echo setlocale(LC_TIME, 0);验证区域是否设置成功。
方法二:跨环境推荐(IntlDateFormatter)
不依赖系统区域包,用PHP国际化扩展实现,兼容性更强:
// 从MySQL获取的日期字符串 $mysqlDate = '2024-05-28'; // 初始化DateTime对象 $date = new DateTime($mysqlDate); // 创建瑞典语日期格式化器 $formatter = new IntlDateFormatter( 'sv_SE', IntlDateFormatter::NONE, IntlDateFormatter::NONE, date_default_timezone_get(), IntlDateFormatter::GREGORIAN, 'dd MMM yyyy' // 格式模板,MMM对应本地化月份缩写 ); // 输出格式化结果 echo $formatter->format($date); // 输出:28 Maj 2024
如果提示找不到IntlDateFormatter,需在php.ini中开启extension=intl扩展,或通过包管理器安装。
内容的提问来源于stack exchange,提问作者New-Girl
相关产品推荐
相关产品推荐

