首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php8.1 -不推荐的功能: DateTime()

php8.1 -不推荐的功能: DateTime()
EN

Stack Overflow用户
提问于 2022-09-19 08:47:33
回答 1查看 81关注 0票数 0

我们使用以下代码,这些代码在php7.4上工作得很好,但是在php8.1上我们得到了一个不推荐的错误。但是,我们如何才能成功地为php8.1重写这些呢?

错误:

代码语言:javascript
复制
Deprecated Functionality: DateTime::__construct(): Passing null to parameter #1 ($datetime) of type string is deprecated

当前代码:

代码语言:javascript
复制
$today = new \DateTime();$orderdate = new \DateTime($orders->getCreatedAt());

<?php if($orderdate->diff($today)->days > 14):?>

<?php endif;?>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-19 10:30:29

你不能再这样做了:

代码语言:javascript
复制
new \DateTime(null);

在您的确切用例中,我认为PHP在代码中突出了一个bug。如果订单没有创建的日期,您将使用脚本运行时的日期/时间填充变量,这可能不是您想要的:

代码语言:javascript
复制
var_dump(new \DateTime('1985-12-31 15:00:00'));
var_dump(new \DateTime(''));
var_dump(new \DateTime(null));
代码语言:javascript
复制
object(DateTime)#1 (3) {
  ["date"]=>
  string(26) "1985-12-31 15:00:00.000000"
  ["timezone_type"]=>
  int(3)
  ["timezone"]=>
  string(16) "Europe/Amsterdam"
}
object(DateTime)#1 (3) {
  ["date"]=>
  string(26) "2022-09-19 12:28:23.003960"
  ["timezone_type"]=>
  int(3)
  ["timezone"]=>
  string(16) "Europe/Amsterdam"
}

Deprecated: DateTime::__construct(): Passing null to parameter #1 ($datetime) of type string is deprecated in /in/67OFM on line 5
object(DateTime)#1 (3) {
  ["date"]=>
  string(26) "2022-09-19 12:28:23.003987"
  ["timezone_type"]=>
  int(3)
  ["timezone"]=>
  string(16) "Europe/Amsterdam"
}

演示

如果您想使用DB信息:

代码语言:javascript
复制
$orderdate = $orders->getCreatedAt()
    ? new \DateTime($orders->getCreatedAt())
    : null;

如果您想默认为“现在”,请将其显示出来,这样就不会有人怀疑它是否是有意的:

代码语言:javascript
复制
$orderdate = $orders->getCreatedAt()
    ? new \DateTime($orders->getCreatedAt())
    : new \DateTime();

最后但同样重要的是..。从业务逻辑的角度分析没有创建日期的订单是否有意义。那是什么意思?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73770765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档