0

在我的 UI 中,日期显示如下 - 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 日期时间?

谢谢

勒龙

4

2 回答 2

2

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")
于 2012-06-22T06:03:15.430 回答
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() 函数可以帮助您。

于 2012-06-22T06:46:53.307 回答