Answers:
问题是您正在使用'M'
和'D'
,它们是文本表示形式,MySQL希望使用格式的数字表示形式2010-02-06 19:30:13
尝试:date("Y-m-d H:i:s")
使用数字等效项。
编辑:切换G
到H
,虽然可能没有影响,但您可能希望使用带前导0的24小时格式。
这是一个替代解决方案:如果您将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代码创建一个变量,然后将其插入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
是datetime列,则可以这样插入当前日期:
$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
。