Короткий ответ: нет способа автоматически проанализировать произвольные форматы дат, которые будут правильно анализировать все форматы.В ваших собственных примерах форматов просто нет возможности узнать, какие числа для каких приращений даты.
Вы можете посмотреть на принятые форматы strtotime () , и если все ваши поставщики используютформаты признаны им, значит, вам повезло.Но если нет, лучшее, что вы действительно можете сделать, это создать таблицу поиска "vendor" => "format"
, а затем вы можете использовать date_parse_from_format ()
edit: * на основениже приведен комментарий, это php4-версия аппроксимации date_parse_from_format (), которая должна соответствовать вашим потребностям *
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
, где 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
)