私はこれをうまく機能させるために約2時間努力してきました。11/18/2012のように入力された日付をmysqlタイムスタンプに変換しようとしていますが、試したものはすべて、データベースで0000-00-0000:00:00またはNULLとして終了します:(I ' m PHP + MYSQLを使用しているので、どちらのソリューションも素晴らしいでしょう
8 に答える
これを試して
$release_date=$_POST['release_date'];
echo date("Y-m-d H:i:s",strtotime($release_date));
PHPのDateTimeが救いの手を差し伸べます!
$datetime = new DateTime($alternativeFormat);
echo $datetime->format('Y-m-d H:i:s'); // mysql format
MySQLによるデータの変更を残すことも可能ですが、私はそれに反対することをお勧めします。オブジェクトを使用することによりDateTime
、クエリを開いたままにして、他の形式もサポートできるようにします。
使用STR_TO_DATE
:
SELECT TIMESTAMP(STR_TO_DATE('11/18/2012','%m/%d/%Y'))
http://sqlfiddle.com/#!2/d41d8/4363/0
あなたはあなたが試したと述べました:
UNIX_TIMESTAMP(STR_TO_DATE('$release_date','%m/%d/%y'))
これが機能しない理由は、UNIX_TIMESTAMP
の戻り型が符号なし整数であり、ではないためTIMESTAMP
です。TIMESTAMP
これが、列に挿入できない理由です
私はこのようなことを試みます。
$sDate = '11/18/2012';
$aDate = explode('/', $sDate);
$sMySQLTimestamp = sprintf(
'%s-%s-%s 00:00:00',
$aDate[2],
$aDate[0],
$aDate[1]
);
var_dump($sMySQLTimestamp);
> string(19) "2012-11-18 00:00:00"
試しましたか:http strtotime()
://php.net/manual/en/function.strtotime.php
または、「/」を展開してから、http mktime()
://php.net/manual/en/function.mktime.phpを使用します。
$parts = explode('/', $date);
$timestamp = mktime(0, 0, 0, $parts[0], $parts[1], $parts[2]);
または、ここに投稿された回答の他の提案はありますか?
私の好きな方法:
$date = '10/1/2012';
$mysqlDate = date('Y-m-d', strtotime($date));
その例の日付を2012/11/18として入力できますか?
はいの場合は使用
select convert('2012/11/18' ,DATETIME)
またはあなたが使用することができます
select convert(str_to_date('11/18/2012','%m/%d/%Y'),DATETIME)
正しい答えは、あなたが何をしようとしているのかによって異なりますが、ほとんどの場合、これらの組み合わせです。
- PHPでタイムスタンプを表すには、文字列ではなくDateTimeオブジェクトを使用します。(データベースに書き込むときではなく、入力時に変換します)。
- プレースホルダーを持つデータベースインターフェイスを使用し、DateTimeである値を入力すると、それらを適切な文字列形式に自動的に変換します
これにより、MySQLで期待されるネイティブ形式に変換したり、認識したりする必要がなくなります。