在MySQL中插入datetime时使用PHP date()格式

如果我想将结果插入MySQL datetimetypes列,那么在PHP中传递给date()函数的正确格式是什么?

我一直在尝试date("YMD G:i:s")但只是插入“0000-00-00 00:00:00”每次。

问题是你正在使用'M''D' ,这是一个文本表示,MySQL期待格式的数字表示forms2010-02-06 19:30:13

尝试:使用数字等值的date("Ymd H:i:s")

编辑:切换到H ,虽然它可能没有影响,你可能要使用领先0的24小时制。

从php的date()手册页的意见 :

 <?php $mysqltime = date ("Ymd H:i:s", $phptime); ?> 

你的“Y”是正确的 – 这是一整年,但是“M”是三个月的字符,而“m”是两个月的月份。 与“D”而不是“d”同样的问题。 “G”是一个1或2位数的小时,其中“H”在需要时总是具有前导0。

这里有一个替代解决scheme:如果您将PHP中的date作为时间戳,请绕过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 | +---------------------+ 

我使用下面的PHP代码来创build一个我插入MySQL DATETIME列的variables。

 $datetime = date_create()->format('Ymd H:i:s'); 

这将保存服务器的当前date和时间。

格式化时间戳到MySQL DATETIME列:

 strftime('%Y-%m-%d %H:%M:%S',$timestamp); 

使用PHP格式化MySQL datetime

 $date = "'".date('Ymd H:i:s', strtotime(str_replace('-', '/', $_POST['date'])))."'"; 
 $date_old = '23-5-2016 23:15:23'; //Date for database $date_for_database = date ("Ymd H:i:s", strtotime($date_old)); //Format should be like 'Ymd H:i:s'`enter code here` 

如果不使用时间戳,则不需要使用PHP中的date()方法。 如果dateposted是date时间列,则可以插入当前date,如下所示:

 $db->query("INSERT INTO table (dateposted) VALUES (now())"); 

我使用这个函数(PHP 7)

 function getDateForDatabase(string $date) : string { $timestamp = strtotime($date); $date_formated = date('Ymd H:i:s', $timestamp); return $date_formated; } 

老版本的PHP(PHP <7)

 function getDateForDatabase($date) { $timestamp = strtotime($date); $date_formated = date('Ymd H:i:s', $timestamp); return $date_formated; } 

这一直让我疯狂寻找一个简单的答案。 最后,我做了这个函数,似乎捕获所有input,并给出一个正确的或至less有效和可检查的良好的SQLstring。 如果是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('Ym-d', strtotime('1999-12-31')); } if (($t = strtotime($date)) === false) { //use 1999-12-31 as a valid date or as an alert return date('Ym-d', strtotime('1999-12-31')); } else { return date('Ymd H:i:s', strtotime($date)); } }