在MySQL中插入datetime时使用PHP date()格式
如果我想将结果插入MySQL datetime
types列,那么在PHP中传递给date()
函数的正确格式是什么?
我一直在尝试date("YMD G:i:s")
但只是插入“0000-00-00 00:00:00”每次。
问题是你正在使用'M'
和'D'
,这是一个文本表示,MySQL期待格式的数字表示forms2010-02-06 19:30:13
尝试:使用数字等值的date("Ymd H:i:s")
。
编辑:切换到H
,虽然它可能没有影响,你可能要使用领先0的24小时制。
从php的date()
手册页的意见 :
<?php $mysqltime = date ("Ymd H:i:s", $phptime); ?>
你的“Y”是正确的 – 这是一整年,但是“M”是三个月的字符,而“m”是两个月的月份。 与“D”而不是“d”同样的问题。 “G”是一个1或2位数的小时,其中“H”在需要时总是具有前导0。
这里有一个替代解决scheme:如果您将PHP中的date作为时间戳,请绕过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代码来创build一个我插入MySQL DATETIME列的variables。
$datetime = date_create()->format('Ymd H:i:s');
这将保存服务器的当前date和时间。
格式化时间戳到MySQL DATETIME列:
strftime('%Y-%m-%d %H:%M:%S',$timestamp);
使用PHP格式化MySQL datetime
$date = "'".date('Ymd H:i:s', strtotime(str_replace('-', '/', $_POST['date'])))."'";
$date_old = '23-5-2016 23:15:23'; //Date for database $date_for_database = date ("Ymd H:i:s", strtotime($date_old)); //Format should be like 'Ymd H:i:s'`enter code here`
如果不使用时间戳,则不需要使用PHP中的date()方法。 如果dateposted
是date时间列,则可以插入当前date,如下所示:
$db->query("INSERT INTO table (dateposted) VALUES (now())");
我使用这个函数(PHP 7)
function getDateForDatabase(string $date) : string { $timestamp = strtotime($date); $date_formated = date('Ymd H:i:s', $timestamp); return $date_formated; }
老版本的PHP(PHP <7)
function getDateForDatabase($date) { $timestamp = strtotime($date); $date_formated = date('Ymd H:i:s', $timestamp); return $date_formated; }
这一直让我疯狂寻找一个简单的答案。 最后,我做了这个函数,似乎捕获所有input,并给出一个正确的或至less有效和可检查的良好的SQLstring。 如果是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('Ym-d', strtotime('1999-12-31')); } if (($t = strtotime($date)) === false) { //use 1999-12-31 as a valid date or as an alert return date('Ym-d', strtotime('1999-12-31')); } else { return date('Ymd H:i:s', strtotime($date)); } }