形式のテキスト文字列として日付があります -
16 October 2012
08 October 2012
04 October 2012
それらをMySQLの「日付」に適した形式に変換したいと思います。
私は次の実装を持っています -
$fixed = date("Y-m-d", strtotime($date));
すべての日付を --
1969-12-31
strtotime
受け入れ可能な形式のリストがありますが、使用しているものは1つではありません。
あなたがしたいstrptime()
$d = strptime($date, '%d %B %Y');
$fixed = date("Y-m-d", mktime(0,0,0,$d['tm_mon'],$d['tm_mday'],$d['tm_year']));
PHP 日付関数を使用して結果を取得する他の回答とは別に、それらを回避し、特定のケースでより高速なアプローチを使用する場合は、次のカスタム関数を使用できます。
function mysql_date($d) {
$m = array('jan','feb','mar','apr','may','jun','jul','aug','sep','oct','nov','dec');
$ex = explode(' ',$d);
$mon = array_search( strtolower( substr($ex[1],0,3) ) ,$m) + 1;
return $ex[2] . '-' . $mon . '-' . $ex[0];
}
$date='16 October 2012';
echo mysql_date($date); //echoes '2012-10-16'
これは PHP 5.3 以降で動作するはずです:
$date='16 October 2012';
$a = date_parse_from_format($date, '%d %F %Y');
$atime = mktime(0, 0, 0, $a['month'], $a['day'], $a['year']);
echo date("Y-m-d", $atime);
古いバージョンの PHP を使用している場合は、PHP が Windows にstrptime()
実装されていないため、PHP が Windows に実装されていないことに注意してください。推奨される方法はdate_parse_from_format()
、上記の提案のように使用することです。strptime()ページから抽出された警告を参照してください。
注: この関数は、Windows プラットフォームでは実装されていません。
注: 内部的に、この関数は、システムの C ライブラリによって提供される strptime() 関数を呼び出します。この関数は、異なるオペレーティング システム間で著しく異なる動作を示すことがあります。これらの問題の影響を受けない date_parse_from_format() の使用は、PHP 5.3.0 以降で推奨されます。
したがって、5.3 より古い PHP を使用していて、それが Windows で実行されない場合は、次のコードを使用できます。
$date='16 October 2012';
$a = strptime($date, '%d %B %Y');
$atime = mktime(0, 0, 0, $a['tm_mon'], $a['tm_mday'], $a['tm_year']);
echo date("Y-m-d", $atime);
これにはPHP のDateTime
クラスを使用します。
function sqlDateFromLongDate($input) {
$dateObj = DateTime::createFromFormat($input,'d F Y');
return $dateObj->format('Y-m-d');
}
print sqlDateFromLongDate('08 October 2012');
それが役立つことを願っています。
**注: このソリューションには PHP 5.3 以降が必要です。(ただし、これが現在サポートされている最小バージョンであることにも注意してください。それより前のバージョンを使用している場合は、php 5.2 は 2 年近く前にサポートが終了していることに注意してください。アップグレードの時期です)。