当我写一个php DateTimeInterface
到mysql timestamp
字段时,我总是这样做:
$datetime = (new DateTime())->format('Y-m-d H:i:s');
$sql = "... when_inserted = '$datetime'";
我知道DateTimeInterface::format
支持完整的日期/时间格式(c
,r
),但它们都在mysql上产生警告c
:2023-03-22T11:33:40+01:00
mysql警告:Data truncated for column 'when_inserted' at row 1
r
:Wed, 22 Mar 2023 11:33:40 +0100
mysql警告:Data truncated for column 'when_inserted' at row 1
有没有更短的方法,或者我必须用无聊和冗长的Y-m-d H:i:s
的日期?
3条答案
按热度按时间qvsjd97n1#
使用
'Y-m-d H:i:s'
对于MySQL是正确的。不幸的是,没有内置的方法或常量来获取此格式。要优化工作流,您可以自己将格式定义为常量,并在整个项目中使用它。
2cmtqfgy2#
如果你不想每次都写那些格式语句,并且希望在字符串上下文中使用对象时自动注入对象的字符串表示,请使用
__toString()
魔术方法。为此,创建您自己的Custom类,并通过扩展
DateTime
类使其成为子类,并在其中实现__toString()方法,并在您的sql变量中使用它,如下所示:代码段:
Online Demo
fnx2tebb3#
Mysql NOW()函数可能是您的解决方案。