在我的UI中,日期是这样显示的 - dd.mm.YYYY hh:ii:ss
.用户可以编辑/添加新日期,并且很可能会尝试使用相同的格式(24.06.2012 15:35:00),该格式不能用于SQL查询。这是我到目前为止所做的:
$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));
行和支票,日期只插入零。 对于 SQL 来说,$newdate
是正确的格式 - YYYY-mm-dd H:i:s
但 obv。我在这里错过了一些东西。如何将此字符串作为有效的SQL日期时间插入?
谢谢
莱龙
DateTime 类是在 PHP 5.2 中引入的,它允许你使用类似的东西
$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")
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 字符串、时间戳或格式为 YYMMDD 或 YYYYMMDD。
$SqlString = "SELECT *, UNIX_TIMESTAMP($mydate) AS mydate FROM table WHERE conId = $conId";
深入了解这些 MySql 函数,mktime() 函数也可以为您提供帮助。