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


PHP/MySQL - preparing string in a right format for inserting in a datetime SQL column

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