PHP,如何为mysql格式化DateTimeInterface?

rslzwgfq  于 2023-03-28  发布在  PHP
关注(0)|答案(3)|浏览(106)

当我写一个php DateTimeInterface到mysql timestamp字段时,我总是这样做:

$datetime = (new DateTime())->format('Y-m-d H:i:s');
$sql = "... when_inserted = '$datetime'";

我知道DateTimeInterface::format支持完整的日期/时间格式(cr),但它们都在mysql上产生警告
c2023-03-22T11:33:40+01:00
mysql警告:Data truncated for column 'when_inserted' at row 1
rWed, 22 Mar 2023 11:33:40 +0100
mysql警告:Data truncated for column 'when_inserted' at row 1
有没有更短的方法,或者我必须用无聊和冗长的Y-m-d H:i:s的日期?

qvsjd97n

qvsjd97n1#

使用'Y-m-d H:i:s'对于MySQL是正确的。不幸的是,没有内置的方法或常量来获取此格式。
要优化工作流,您可以自己将格式定义为常量,并在整个项目中使用它。

2cmtqfgy

2cmtqfgy2#

如果你不想每次都写那些格式语句,并且希望在字符串上下文中使用对象时自动注入对象的字符串表示,请使用__toString()魔术方法。
为此,创建您自己的Custom类,并通过扩展DateTime类使其成为子类,并在其中实现__toString()方法,并在您的sql变量中使用它,如下所示:

代码段:

<?php

class CustomDateTime extends DateTime{
    public function __toString(){
        return $this->format('Y-m-d H:i:s');
    }
}

$datetime = new CustomDateTime();
$sql = "... when_inserted = '$datetime'";

echo $sql;

Online Demo

fnx2tebb

fnx2tebb3#

Mysql NOW()函数可能是您的解决方案。

$sql = "... when_inserted = NOW()";

相关问题