简短的回答是,没有办法自动解析可以正确解析所有格式的任意日期格式。在您自己的示例格式中,无法知道哪些数字对应于哪些日期增量。
您可以查看strtotime()的可接受格式,如果您的所有供应商都使用它认可的格式,那么您很幸运。但如果没有,你能做的最好的事情就是创建一个查找表,"vendor" => "format"
然后你可以使用date_parse_from_format()
编辑: *基于下面的评论,这里是 date_parse_from_format() 的近似值的 php4 版本,应该适合您的需求*
function date_parse_from_format($format, $date) {
$dMask = array('H'=>'hour','i'=>'minute','s'=>'second','y'=>'year','m'=>'month','d'=>'day');
$format = preg_split('//', $format, -1, PREG_SPLIT_NO_EMPTY);
$date = preg_split('//', $date, -1, PREG_SPLIT_NO_EMPTY);
foreach ($date as $k => $v) {
if ($dMask[$format[$k]]) $dt[$dMask[$format[$k]]] .= $v;
}
return $dt;
}
基本上,您需要有一个查找表,vendor => format
其中格式是日期字符串中每个字符所代表的掩码。
注意:用于每个日期/时间增量的掩码并不完全反映 php 的正常date()字符串格式中使用的内容。它被简化,旨在掩盖自定义字符串的每个单独字符。
例子:
/*
lookup table for vendors
for EVERY character you want to count as a date/time
increment you must use the following masks:
hour : H
minute : i
second : s
year : y
month : m
day : d
*/
$vendorDateFormats = array(
'vendor1' => 'yyyymmdd',
'vendor2' => 'mmddyyyy',
'vendor3' => 'ddmmyyyy',
'vendor4' => 'yyyy.mm.dd HH:ii:ss'
);
// example 1:
echo "<pre>";
print_r(date_parse_from_format($vendorDateFormats['vendor2'],'03232011'));
// example 2:
echo "<pre>";
print_r(date_parse_from_format($vendorDateFormats['vendor4'],'2011.03.23 12:03:00'));
输出:
Array
(
[month] => 03
[day] => 23
[year] => 2011
)
Array
(
[year] => 2011
[month] => 03
[day] => 23
[hour] => 12
[minute] => 03
[second] => 00
)