對其進行測試(無需編寫測試腳本)簡短的答案是,有沒有辦法自動解析任意日期格式,將正確解析所有格式在那裏。在你自己的示例格式中,沒有辦法知道哪些數字是用於哪個日期增量。
您可以查看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