$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`
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 回答
我用这个函数(PHP 7)
旧版本的PHP(PHP <7)
这让我很生气,寻找一个简单的答案 . 最后,我创建了这个函数,它似乎捕获了所有输入并提供了一个正确或至少有效且可检查的良好SQL字符串 . 如果它是1999-12-31它可能是错误的但不会在MySQL中引发错误 .
问题是你正在使用
'M'
和'D'
,这是一个文本表示,MySQL期望格式的数字表示2010-02-06 19:30:13
尝试:
date("Y-m-d H:i:s")
使用数字等价物 .编辑:切换
G
到H
,虽然它可能没有影响,但您可能希望使用带有前导0的24小时格式 .来自php的评论date() manual page:
你的'Y'是正确的 - 这是一整年,但'M'是一个三个月的月份,而'm'是两个月的月份 . 与'D'而不是'd'相同的问题 . 'G'是1或2位小时,其中'H'在需要时始终具有前导0 .
这是一个替代解决方案:如果您将PHP中的日期作为时间戳,则绕过使用PHP处理它并让DB负责使用
FROM_UNIXTIME
函数对其进行转换 .使用PHP格式化MySQL datetime
将时间戳格式化为MySQL DATETIME列:
我使用以下PHP代码创建一个插入MySQL DATETIME列的变量 .
这将保留服务器的当前日期和时间 .
如果不使用时间戳,则不需要使用PHP中的date()方法 . 如果
dateposted
是日期时间列,您可以像这样插入当前日期: