次の形式があります。
Sunday 16th of January 2011 06:55:41 PM
これは文字列ベースの形式であるため、日付情報は多かれ少なかれ人間が読める形式にエンコードされます。幸いなことに英語で。見てみましょう、それはすべてスペースで区切られた複数のものです:
Sunday - Weekdayname
16th - Date of Month, numeric, st/nd/th form
of - The string "of".
January - Monthname
2011 - Year, 4 digits
06:55:41 - Hour 2 digits 12 hours; Colon; Minute 2 digits; Colon; Seconds 2 digits
PM - AM/PM
したがって、各ノードをスペースで区切り、データを分析できます。必要なのはすべての Monthnames とsscanf
関数だけです。これは、月、月の日付、および年のみが必要なためです。
$input = 'Sunday 16th of January 2011 06:55:41 PM';
$r = sscanf($input, "%*s %d%*s of %s %d", $day, $monthname, $year);
これにより、次の変数が既に提供されます。
$monthname - string(7) "January"
$day - int(16)
$year - int(2011)
したがって、あとは月名をマップ (PHP の配列の形式) とフォーマットされた出力で実行できる数値に転置するだけです。
$monthnames = array(
'January' => 1,
# ...
);
printf("%02d-%02d-%04d", $day, $monthnames[$monthname], $year);
したがって、どのような問題があっても、入力がある程度一貫してフォーマットされている限り、それを分解し、取得したデータを処理し、必要に応じて出力を行うことができます。それがどのように機能するかです。