如何在PHP(Laravel)中将CSV特定日期转为SQL Server可用datetime
解决西班牙语CSV日期格式转换为SQL Server兼容格式的问题
strtotime无法正确解析西班牙语的日期缩写(如lun.代表周一、ene.代表一月),也无法识别p. m.这种下午格式,因此返回时间戳0,最终得到1970-01-01 00:00:00。以下是两种可靠的解决方法:
方法一:利用PHP本地化+DateTime::createFromFormat
通过设置本地化让PHP识别西班牙语日期标识,再按指定格式解析:
// 启用西班牙语日期本地化(需服务器安装对应语言包) setlocale(LC_TIME, 'es_ES.UTF-8'); $originalDate = 'lun. 08 ene. 2024, 1:54:02 p. m.'; // 按原始格式解析日期 $dateObj = DateTime::createFromFormat('D. d M. Y, g:i:s A', $originalDate); // 转换为SQL Server兼容的格式 $formattedDate = $dateObj->format('Y-m-d H:i:s'); echo $formattedDate; // 输出:2024-01-08 13:54:02
方法二:手动替换西班牙语缩写为英文(无需依赖本地化)
如果服务器未安装西班牙语本地化包,直接替换日期中的西班牙语标识为strtotime可识别的英文格式:
$originalDate = 'lun. 08 ene. 2024, 1:54:02 p. m.'; // 映射西班牙语日期缩写到英文 $dateReplacements = [ // 星期缩写 'lun.' => 'Mon', 'mar.' => 'Tue', 'mié.' => 'Wed', 'jue.' => 'Thu', 'vie.' => 'Fri', 'sáb.' => 'Sat', 'dom.' => 'Sun', // 月份缩写 'ene.' => 'Jan', 'feb.' => 'Feb', 'mar.' => 'Mar', 'abr.' => 'Apr', 'may.' => 'May', 'jun.' => 'Jun', 'jul.' => 'Jul', 'ago.' => 'Aug', 'sep.' => 'Sep', 'oct.' => 'Oct', 'nov.' => 'Nov', 'dic.' => 'Dec', // 上下午格式 'p. m.' => 'PM', 'a. m.' => 'AM' ]; // 替换后解析日期 $englishDate = strtr($originalDate, $dateReplacements); $formattedDate = date('Y-m-d H:i:s', strtotime($englishDate)); echo $formattedDate; // 输出:2024-01-08 13:54:02
内容的提问来源于stack exchange,提问作者Byorsh19
相关产品推荐
相关产品推荐

