結果をMySQLのdatetime
型の列に挿入する場合、PHPのdate()
関数に渡す正しい形式は何ですか?
私はdate("Y-M-D G:i:s")
を試してみましたが、毎回 "0000-00-00 00:00:00"を挿入するだけです。
問題はあなたが'M'
と'D'
を使っているということです。これらはテキスト表現です、MySQLはフォーマット2010-02-06 19:30:13
の数値表現を期待しています。
試してみてください。同等の数値を使用するdate("Y-m-d H:i:s")
。
edit:G
をH
に変更しましたが、影響はないかもしれませんが、おそらく先頭に0を付けて24時間形式を使用したいでしょう。
Phpの date()
マニュアルページのコメントから :
<?php $mysqltime = date ("Y-m-d H:i:s", $phptime); ?>
あなたは 'Y'を正しいとしました - それは通年ですが、 'M'は2桁の月ですが、 'M'は3文字の月です。 'd'ではなく 'D'でも同様の問題があります。 'G'は1桁または2桁の時です。 'H'は必要に応じて常に先頭に0を付けます。
これに代わる解決策があります:PHPに日付をタイムスタンプとして持っているなら、PHPでそれを扱うことをバイパスして、DBがFROM_UNIXTIME
関数を使ってそれを変換するようにしてください。
mysql> insert into a_table values(FROM_UNIXTIME(1231634282));
Query OK, 1 row affected (0.00 sec)
mysql> select * from a_table;
+---------------------+
| a_date |
+---------------------+
| 2009-01-10 18:38:02 |
+---------------------+
MySQLのDATETIMEカラムに挿入する変数を作成するには、次のPHPコードを使用します。
$datetime = date_create()->format('Y-m-d H:i:s');
これはサーバの現在の日付と時刻を保持します。
$date_old = '23-5-2016 23:15:23';
//Date for database
$date_for_database = date ("Y-m-d H:i:s", strtotime($date_old));
//Format should be like 'Y-m-d H:i:s'`enter code here`
タイムスタンプをMySQL DATETIME列にフォーマットします。
strftime('%Y-%m-%d %H:%M:%S',$timestamp);
私はこの機能を使っています(PHP 7)
function getDateForDatabase(string $date): string {
$timestamp = strtotime($date);
$date_formated = date('Y-m-d H:i:s', $timestamp);
return $date_formated;
}
PHPの旧バージョン(PHP <7)
function getDateForDatabase($date) {
$timestamp = strtotime($date);
$date_formated = date('Y-m-d H:i:s', $timestamp);
return $date_formated;
}
PHPでMySQLの日時をフォーマットする
$date = "'".date('Y-m-d H:i:s', strtotime(str_replace('-', '/', $_POST['date'])))."'";
タイムスタンプを使用しない場合は、PHPのdate()メソッドを使用する必要はありません。 dateposted
が日時列の場合は、次のように現在の日付を挿入できます。
$db->query("INSERT INTO table (dateposted) VALUES (now())");
これは私に簡単な答えを探して怒っています。最後に、すべての入力をキャッチして正しいか、少なくとも有効でチェック可能な優れたSQL文字列を提供するように思われるこの関数を作成しました。 1999-12-31であればおそらくそれは間違っていますが、MySQLに悪いエラーを投げることはありません。
function MakeSQLDate($date) {
if (is_null($date)) {
//use 1999-12-31 as a valid date or as an alert
return date('Y-m-d', strtotime('1999-12-31'));
}
if (($t = strtotime($date)) === false) {
//use 1999-12-31 as a valid date or as an alert
return date('Y-m-d', strtotime('1999-12-31'));
} else {
return date('Y-m-d H:i:s', strtotime($date));
}
}
PHP 7以降でDateTime
クラスを使用する:
function getMysqlDatetimeFromDate(int $day, int $month, int $year): string {
$dt = new DateTime();
$dt->setTimezone(new DateTimeZone('UTC'));
$dt->setDate($year, $month, $day);
$dt->setTime(0, 0, 0, 0); // set tine to midnight
return $dt->format("Y-m-d H:i:s");
}
受け入れられた答えに対する小さな補足:データベースdatetime
がUTCとして保存されている場合(私がいつもしていることですが)、gmdate("Y-m-d H:i:s")
の代わりにdate("Y-m-d H:i:s")
を使うべきです。
あるいは、MySQLにすべてを処理させることを好む場合は、いくつかの回答が示すように、MySQLのUTC_TIMESTAMP
を挿入しても同じ結果が得られます。
注:私は現在の時間を参照して質問を理解しました。
これは、より正確な方法です。秒の後ろに小数を配置して、精度を上げます。
$now = date('Y-m-d\TH:i:s.uP', time());
.uP
に注意してください。