PHP / MySQL - 以正确的格式准备字符串以插入日期时间SQL列

时间:2012-06-22 05:50:05

标签: php sql

在我的界面中,日期显示如下 - 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

2 个答案:

答案 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()函数也可以为您提供帮助。