如果我想将结果插入到MySQL date()
类型列中,那么传递给PHP中datetime
函数的正确格式是什么?
我一直在尝试date("Y-M-D G:i:s")
,但每次只插入“0000-00-00 00:00:00”。
答案 0 :(得分:614)
问题在于您使用的是'M'
和'D'
,它们是文本表示形式,MySQL期望格式为2010-02-06 19:30:13
的数字表示
尝试:date("Y-m-d H:i:s")
使用数字等价物。
编辑:切换G
到H
,虽然它可能没有影响,但您可能希望使用带有前导0的24小时格式。
答案 1 :(得分:101)
来自php的date()
manual page的评论:
<?php $mysqltime = date ("Y-m-d H:i:s", $phptime); ?>
你的'Y'是正确的 - 这是一整年,但'M'是一个三个月的月份,而'm'是一个两位数的月份。与'D'而不是'd'相同的问题。 'G'是1或2位小时,其中'H'在需要时始终具有前导0。
答案 2 :(得分:40)
这是一个替代解决方案:如果您将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 |
+---------------------+
答案 3 :(得分:23)
我使用以下PHP代码创建一个插入MySQL DATETIME列的变量。
$datetime = date_create()->format('Y-m-d H:i:s');
这将保留服务器的当前日期和时间。
答案 4 :(得分:10)
$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`
答案 5 :(得分:9)
将时间戳格式化为MySQL DATETIME列:
strftime('%Y-%m-%d %H:%M:%S',$timestamp);
答案 6 :(得分:9)
我使用此功能(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;
}
答案 7 :(得分:8)
使用PHP格式化MySQL日期时间
$date = "'".date('Y-m-d H:i:s', strtotime(str_replace('-', '/', $_POST['date'])))."'";
答案 8 :(得分:6)
如果不使用时间戳,则不需要使用PHP中的date()方法。如果dateposted
是日期时间列,则可以插入当前日期:
$db->query("INSERT INTO table (dateposted) VALUES (now())");
答案 9 :(得分:1)
这让我很生气,寻找一个简单的答案。最后我创建了这个函数,似乎捕获了所有输入并提供了一个正确或至少有效且可检查的良好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));
}
}
答案 10 :(得分:0)
在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");
}
答案 11 :(得分:0)
已接受答案的一个小附录:如果数据库datetime
以UTC格式存储(我经常这样做),则应使用gmdate("Y-m-d H:i:s")
而不是date("Y-m-d H:i:s")
。
或者,如果您希望让MySQL处理所有事情,如一些答案所示,我将插入MySQL的UTC_TIMESTAMP
,并得到相同的结果。
注意:我理解有关当前时间的问题。
答案 12 :(得分:0)
这是一种更准确的方法。它将小数点放在秒后,以提供更高的精度。
$now = date('Y-m-d\TH:i:s.uP', time());
注意.uP
。