如何在PHP中分离Sat Feb 3 19:34:10 2018格式的日期与时间
在PHP中分离非标准时间字符串的日期和时间
在PHP里处理这种像Sat Feb 3 19:34:10 2018这样的非标准时间格式,我通常会优先选择DateTime类相关的方法,因为它既可靠又灵活,不用自己手动处理各种格式细节。下面给你几种实用的实现方案:
方法一:使用DateTime::createFromFormat(最推荐)
这是PHP专门用来解析自定义时间格式的API,能精准匹配你的字符串格式,还能轻松转换成你需要的日期时间格式。代码示例:
$originalStr = "Sat Feb 3 19:34:10 2018"; // 按照原字符串的格式创建DateTime对象 $dateObj = DateTime::createFromFormat('D M j H:i:s Y', $originalStr); if ($dateObj) { // 提取日期,可自定义格式,比如'Y-m-d'、'F j, Y'等 $datePart = $dateObj->format('Y-m-d'); // 提取时间,可自定义格式,比如'H:i:s'、'h:i:s A'(12小时制带AM/PM) $timePart = $dateObj->format('H:i:s'); echo "提取的日期:{$datePart}<br>"; echo "提取的时间:{$timePart}"; } else { echo "时间字符串格式解析失败,请检查原字符串格式"; }
这里的格式符对应关系:
D:星期的英文缩写(比如Sat)M:月份的英文缩写(比如Feb)j:不带前导零的日期(比如3)H:i:s:24小时制的时分秒Y:四位数字的年份
方法二:字符串分割(适合格式完全固定的场景)
如果你能确保原字符串的格式永远是星期 月份 日期 时间 年份这种空格分隔的结构,可以直接用explode分割字符串来提取:
$originalStr = "Sat Feb 3 19:34:10 2018"; $parts = explode(' ', $originalStr); // 提取日期相关部分并组合 $rawDate = "{$parts[1]} {$parts[2]} {$parts[4]}"; // 直接提取时间部分 $timePart = $parts[3]; // 可选:将原始日期转成标准格式 $standardDate = date('Y-m-d', strtotime($rawDate)); echo "标准日期:{$standardDate}<br>"; echo "时间:{$timePart}";
这个方法简单粗暴,但缺点是依赖格式绝对固定,如果哪天原字符串的日期带了前导零(比如03)或者格式有其他变化,就会出错,所以只适合场景固定的情况。
方法三:正则表达式匹配(适合复杂自定义场景)
如果你的字符串格式有更多变化,也可以用正则表达式来匹配提取,但写起来相对麻烦,维护成本也高,这里给个示例参考:
$originalStr = "Sat Feb 3 19:34:10 2018"; // 正则匹配提取月份、日期、时间、年份 preg_match('/^\w+ (\w+) (\d+) (\d{2}:\d{2}:\d{2}) (\d{4})$/', $originalStr, $matches); if (!empty($matches)) { $month = $matches[1]; $day = $matches[2]; $time = $matches[3]; $year = $matches[4]; // 转成标准日期格式 $standardDate = date('Y-m-d', strtotime("{$month} {$day} {$year}")); echo "日期:{$standardDate}<br>"; echo "时间:{$time}"; } else { echo "未能匹配到有效日期时间"; }
总结
优先推荐方法一,因为它是PHP官方提供的标准日期处理方案,能处理各种边界情况,比如不同语言环境下的星期/月份缩写(只需设置对应locale),而且代码可读性和可维护性都更高。
内容的提问来源于stack exchange,提问作者Dulkith
相关产品推荐
相关产品推荐

