重複の可能性:
PHP で日付形式を別の日付形式に変換する
ユーザーがフォーマットした日付と、PHP 日付形式 ( http://fr.php.net/manual/en/function.date.php ) を使用した対応する形式があります。この形式は、ユーザー入力前にはわかりません。
この日付を「d/m/Y h:i:s」などの既知の形式に変換する必要があります。PHP サーバーは 5.2.1 PHP バージョンを使用しているため、DateTime クラスを使用できません。
誰かが DateTime::createFromFormat メソッドに代わるもの、このようなスクリプト、または私を助けるアイデアを持っていますか?
よろしく、フロリアン。
編集 :
元の日付形式を知らなくても、日付を他の形式に変換する関数を作成します。
/**
* This function converts a date with unknown format into a defined format.
* It could detect some standard date formats : dd/mm/YYYY, dd-mm-YY, YYYY-mm-dd hh:mm:ss, etc.
* @param string $date date which is user formatted.
* @param int $options used to help algorithm to detect date format : US or FR date, past date or future date, hour format.
* @param string $newFormat format the date must be converted into
* @param string $originalFormat format detected
* @return boolean|string the new date, corresponding to the $date argument, formatted into the $newFormat format
*/
function convertDateToFormat($date, $options = 0, $newFormat, &$originalFormat = ''){
if($options == 0){
$options = DATE_FR | DATE_PAST | HOUR_24;
}
$matches = array();
$year = 0;
$month = 0;
$day = 0;
$hour = 0;
$minute = 0;
$second = 0;
$originalFormatOk = false;
if(preg_match('#(\d{1,2})([/.-])(\d{1,2})(([/.-])(\d{2,4}))?#', $date, $matches)){
if(isset($matches[6])){
if(strlen($matches[6]) == 2){
if($matches[6] >= date('y') && DATE_PAST)
$year = '19'.$matches[6];
else
$year = '20'.$matches[6];
$originalFormatyear = 'y';
if($options & DATE_US){
$originalFormat = 'm'.$matches[2].'d'.$matches[5].$originalFormatyear;
$year = $matches[6];
$month = $matches[1];
$day = $matches[3];
$originalFormatOk = true;
}
}
else{
$year = $matches[6];
$originalFormatyear = 'Y';
}
if(!$originalFormatOk){
$year = $matches[6];
$month = $matches[3];
$day = $matches[1];
$originalFormat = 'd'.$matches[2].'m'.$matches[5].$originalFormatyear;
$originalFormatOk = true;
}
}
else{
if($options & DATE_US){
$originalFormat = 'm'.$matches[2].'d';
$year = date('Y');
$month = $matches[1];
$day = $matches[3];
}
else{
$originalFormat = 'd'.$matches[2].'m';
$year = date('Y');
$month = $matches[3];
$day = $matches[1];
}
$originalFormatOk = true;
}
}
if(preg_match('#'.$matches[0].'(\D*)(\d{1,2})([:hH])(\d{1,2})(:(\d{1,2}))?#', $dateHour, $matches)){
if($options & HOUR_12)
$originalFormatHour = 'h';
else
$originalFormatHour = 'H';
$hour = $matches[2];
$minute = $matches[4];
if(strtolower($matches[3]) == 'h')
$matches[3] = '\\'.$matches[3];
$originalFormat .= $matches[1].$originalFormatHour.$matches[3].'i';
if(isset($matches[6])){
$second = $matches[6];
$originalFormat .= ':s';
}
}
if($originalFormatOk)
return date($newFormat, mktime($hour, $minute, $second, $month, $day, $year));
return false;
}