回答:
問題は、テキスト表現である'M'
and を使用していることです'D'
。MySQLはフォーマットの数値表現を期待しています2010-02-06 19:30:13
試してみてください:date("Y-m-d H:i:s")
同等の数値を使用します。
編集:に切り替えG
ましたがH
、影響はないかもしれませんが、先頭に0が付いた24時間形式を使用することをお勧めします。
PHPのdate()
マニュアルページのコメントから:
<?php $mysqltime = date ("Y-m-d H:i:s", $phptime); ?>
「Y」は正しかった-通年ですが、「M」は3文字の月、「m」は2桁の月です。「d」の代わりに「D」を使用した同じ問題。「G」は1桁または2桁の時間で、「H」は常に必要なときに先頭に0が付きます。
PHPの日付をタイムスタンプとして使用している場合は、PHPでの処理をバイパスし、FROM_UNIXTIME
関数を使用してDBが日付を変換できるようにします。
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 |
+---------------------+
次のPHPコードを使用して、MySQL DATETIME列に挿入する変数を作成します。
$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`
この関数を使用します(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;
}
function getDateForDatabase(string $date) : string {
するのfunction getDateForDatabase($date) {
かについては、PHPには十分な知識がありません。
タイムスタンプを使用しない場合は、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));
}
}
DateTime
PHP7 +でクラスを使用する:
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");
}
これは、より正確な方法です。小数部を秒の後ろに配置して、精度を高めます。
$now = date('Y-m-d\TH:i:s.uP', time());
に注意してください.uP
。