【发布时间】:2011-01-13 23:51:53
【问题描述】:
如果我想将结果插入到 MySQL datetime 类型列中,传递给 PHP 中 date() 函数的正确格式是什么?
我一直在尝试date('Y-M-D G:i:s'),但每次都插入“0000-00-00 00:00:00”。
【问题讨论】:
-
由于您没有提供迄今为止的参数,您是否真的要记录当前时间?
如果我想将结果插入到 MySQL datetime 类型列中,传递给 PHP 中 date() 函数的正确格式是什么?
我一直在尝试date('Y-M-D G:i:s'),但每次都插入“0000-00-00 00:00:00”。
【问题讨论】:
问题是您使用'M' 和'D',它们是文本表示,MySQL 期望格式为2010-02-06 19:30:13 的数字表示
试试:date('Y-m-d H:i:s'),它使用数字等价物。
编辑:将G 切换为H,虽然它可能没有影响,但您可能希望使用带前导0 的24 小时格式。
【讨论】:
来自php的date() manual page的cmets:
<?php $mysqltime = date ('Y-m-d H:i:s', $phptime); ?>
您的“Y”是正确的 - 那是一整年,但“M”是三个字符的月份,而“m”是一个两位数的月份。 'D' 而不是 'd' 的问题相同。 'G' 是 1 或 2 位数的小时,其中 'H' 在需要时总是以 0 开头。
【讨论】:
这是另一种解决方案:如果您在 PHP 中将日期作为时间戳,则绕过 PHP 处理它,并让数据库使用 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');
这将保存服务器的当前日期和时间。
【讨论】:
用 PHP 格式化 MySQL 日期时间
$date = "'".date('Y-m-d H:i:s', strtotime(str_replace('-', '/', $_POST['date'])))."'";
【讨论】:
将时间戳格式化为 MySQL DATETIME 列:
strftime('%Y-%m-%d %H:%M:%S',$timestamp);
【讨论】:
$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 中的 date() 方法。如果dateposted 是日期时间列,您可以像这样插入当前日期:
$db->query("INSERT INTO table (dateposted) VALUES (now())");
【讨论】:
我使用这个函数(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
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 来告诉。
这一直让我疯狂寻找一个简单的答案。最后,我创建了这个函数,它似乎可以捕获所有输入,并给出一个正确或至少有效且可检查的良好 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));
}
}
【讨论】:
null,那么您的上游数据有问题!
在 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');
}
【讨论】:
接受答案的一个小补充:如果数据库 datetime 存储为 UTC(我总是这样做),您应该使用 gmdate('Y-m-d H:i:s') 而不是 date("Y-m-d H:i:s")。
或者,如果您希望让 MySQL 处理所有事情,正如一些答案所建议的那样,我会插入 MySQL 的 UTC_TIMESTAMP,结果相同。
注意:我理解的问题是指当前时间。
【讨论】:
这是一种更准确的方法。它将小数放在秒后,从而提供更高的精度。
$now = date('Y-m-d\TH:i:s.uP', time());
注意.uP。
【讨论】: