如果我想把结果插入到MySQL的datetime
类型的列中,在PHP中传递给date()
函数的正确格式是什么?
我一直在尝试date("Y-M-D G:i:s")
但每次都是插入"0000-00-00 00:00"。
这里有一个替代的解决方案:如果你在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 |
+---------------------+
我使用这个函数(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;
}
这一直让我为寻找一个简单的答案而抓狂。 最后,我做了这个函数,似乎捕捉到了所有的输入,并给出了一个好的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));
}
}
在PHP7+中使用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");
}
这是一种更准确的方法。 它将小数放在秒后,使其更加精确。
$now = date('Y-m-d/TH:i:s.uP', time())。
请注意.uP
.。