对其进行测试(无需编写测试脚本)简短的答案是,有没有办法自动解析任意日期格式,将正确解析所有格式在那里。在你自己的示例格式中,没有办法知道哪些数字是用于哪个日期增量。
您可以查看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
)
排序的副本的http://stackoverflow.com/questions/2891937/strtotime-doesnt-work-with-dd-mm- yyyy-format – Brad 2011-03-23 16:40:01