在我的界面中,日期显示如下 - dd.mm.YYYY hh:ii:ss
。用户可以编辑/添加新日期,并且很可能他们会尝试使用不能用于SQL查询的相同格式(24.06.2012 15:35:00)。以下是我到目前为止所做的事情:
$dt = (date_parse_from_format("d.m.Y H:i:s", $data['event_time']));
$newdate = sprintf("%02d-%02d-%04d %02d:%02d:%02d" , $dt['day'], $dt['month'], $dt['year'], $dt['hour'], $dt['minute'], $dt['second']);
$test = date("Y-m-d H:i:s", strtotime($newdate));
if ($test == "1970-01-01 01:00:00")
{
throw new Exception('Invalid date');
}
会发生什么 - 如果我离开支票if ($test == "1970-01-01 01:00:00")
我会收到异常,但如果我评论$test = date("Y-m-d H:i:s", strtotime($newdate));
行并且检查日期只插入零。
$newdate
是SQL的正确格式 - YYYY-mm-dd H:i:s
但是obv。我想念这里的东西。如何将此字符串作为有效的SQL日期时间插入?
由于
Leron
答案 0 :(得分:2)
在PHP 5.2中引入了DateTime类,允许你使用类似的东西
$dt = DateTime::createFromFormat("d.m.Y H:i:s", $data['event_time']);
if($dt === false){
throw new Exception("Invalid date");
}
DateTime::createFromFormat失败时返回false(此方法仅在PHP 5.3之后可用)
然后在保存到数据库时,您可以使用以下内容来获取MySQL的正确格式
$dt->format("Y-m-d H:i:s")
答案 1 :(得分:0)
MySQL提供FROM_UNIXTIME()和UNIX_TIMESTAMP()函数将Unix时间戳转换为MySQL日期格式,反之亦然。
$SqlString = "INSERT INTO table(mydate, content) VALUES (FROM_UNIXTIME($mydate), $content)";
UNIX_TIMESTAMP,如果不带参数调用,则返回一个Unix时间戳(自1970-01-01 00:00:00'UTC以来的秒数)作为无符号整数。如果使用日期参数调用UNIX_TIMESTAMP(),则它将返回自1970-01-01 00:00:00 UTC以来的参数值。 date可以是DATE字符串,DATETIME字符串,TIMESTAMP或者中的数字 格式为YYMMDD或YYYYMMDD。
$SqlString = "SELECT *, UNIX_TIMESTAMP($mydate) AS mydate FROM table WHERE conId = $conId";
深入了解这些MySql函数,mktime()函数也可以为您提供帮助。