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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 11:20:10