什么是正确的格式传递给日期()函数在PHP中,如果我想将结果插入到一个MySQL datetime类型列?
我一直在尝试date('Y-M-D G: I:s'),但每次都只是插入“0000-00-00 00:00:00”。
什么是正确的格式传递给日期()函数在PHP中,如果我想将结果插入到一个MySQL datetime类型列?
我一直在尝试date('Y-M-D G: I:s'),但每次都只是插入“0000-00-00 00:00:00”。
当前回答
从php的date()手册页的注释:
<?php $mysqltime = date ('Y-m-d H:i:s', $phptime); ?>
你把“Y”写对了——那是一整年,但是“M”是一个有三个字符的月份,而“M”是一个有两位数字的月份。把D写成D也是一样。“G”是1位或2位小时,其中“H”在需要时总是以0开头。
其他回答
格式化MySQL DATETIME列的时间戳:
strftime('%Y-%m-%d %H:%M:%S',$timestamp);
为了寻找一个简单的答案,我快疯了。最后,我让这个函数似乎捕获所有输入,并给出一个正确或至少有效和可检查的良好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中将日期作为时间戳,那么不用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 |
+---------------------+
在PHP7+中使用DateTime类:
function getMysqlDatetimeFromDate(int $day, int $month, int $year): string
{
$dt = new DateTime();
$dt->setDate($year, $month, $day);
$dt->setTime(0, 0, 0, 0); // set time to midnight
return $dt->format('Y-m-d H:i:s');
}
用PHP格式化MySQL datetime
$date = "'".date('Y-m-d H:i:s', strtotime(str_replace('-', '/', $_POST['date'])))."'";