gpt4 book ai didi

php - 如何在 PHP 中将 "0000-00-00 00:00:00"正确设置为 DateTime

转载 作者:行者123 更新时间:2023-12-02 07:25:11 25 4
gpt4 key购买 nike

我有专栏viewedAt这是一个 DATETIME并接受 NULL值。将每条新记录上的该列设置为 0000-00-00 00:00:00 是软件限制。所以我通过使用 Symfony 和 Doctrine 的简单方法,如下所示:

$entEmail = new Email();
$entEmail->setViewedAt(new \DateTime('0000-00-00 00:00:00'));

但令人惊讶的是 PHP 将日期更改为此 -0001-11-30 00:00:00并且 MySQL 服务器中的 SQL 模式设置为 STRICT,因此查询失败。我在这里阅读了很多主题 this , this和其他一些,但根本没有回答我的疑问。我单独用 PHP 做了一些测试,我得到了几乎相同的结果:
$date = new DateTime("0000-00-00 00:00:00", new DateTimeZone('America/New_York'));
echo $date->format('Y-m-d h:i:s');

// outputs
// -0001-11-30 12:00:00

即使 MySQL 模式设置为 STRICT我确实测试了以下查询,它的工作原理如下图所示:
INSERT INTO emails(`emails_category`, `deliveredAt`, `viewedAt`, `data`, `createdAt`, `updatedAt`, `reps_id`, `targets_id`) VALUES ("sent","2015-10-29 06:08:25","0000-00-00 00:00:00",null,"2015-10-29 06:08:25","2015-10-29 06:08:25","005800000058eYcAAI","0018000001GO8omAAD")

enter image description here

所以 viewedAt正在接受 0000-00-00 00:00:00即使该值无效(我认为它是 NULL 左右)

我该如何解决这个问题?有什么解决办法吗?在这个是软件要求且无法更改的特定情况下,您对我有什么建议?

我使用的是 Symfony 2.7.6、Doctrine 2.5.2 和 PHP 5.5.30

最佳答案

你的架构一开始就是错误的。问题不在于设置日期本身,这显然是无效的,以至于 MySQL 和 PHP 都拒绝它,因为没有年份 0 和月份 0 的第 0 天,您看到的输出只是对某种有效日期(它是 01/01/01 之前的 1 年、1 个月和 1 天)。但是,如果您做得对,您也只是错过了 Doctrine 将其抽象化的要点:

$entEmail = new Email();
$entEmail->setViewedAt(null);

现在学说会愉快地放 NULL在数据库列中,因为它应该是。

关于php - 如何在 PHP 中将 "0000-00-00 00:00:00"正确设置为 DateTime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33425311/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com