簡単に言うと、すべての形式を正しく解析する任意の日付形式を自動的に解析する方法はありません。独自のサンプル形式では、どの数値がどの日付の増分であるかを知る方法はありません。
strtotime()の受け入れられている形式を確認できます。すべてのベンダーがそれによって認識されている形式を使用している場合は、幸運です。しかし、そうでない場合、実際にできる最善の方法は、のルックアップテーブルを作成してから、date_parse_from_format()"vendor" => "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
)