【问题标题】:argument #1 ($object) must be of type DateTimeInterface error参数 #1 ($object) 必须是 DateTimeInterface 类型错误
【发布时间】:2023-01-10 17:05:19
【问题描述】:

我真的不明白为什么会出现此错误。 我有 4 个对象

<?php echo  $_GET["allocDatesSt"]; ?> // "01/01/2023"
<?php echo  $_GET["allocDatesEn"]; ?> // "08/01/2023"
<?php echo  $_GET["reqDatesSt"]; ?>   // "15/01/2023"
<?php echo  $_GET["reqDatesEn"]; ?>   // "22/01/2023"

完全是对象类型“string”。

但是当我使用

<?php echo date_format(date_create($_GET["allocDatesSt"]), "d/m/Y"); ?>
<?php echo date_format(date_create($_GET["allocDatesEn"]), "d/m/Y"); ?>
<?php echo date_format(date_create($_GET["reqDatesSt"]), "d/m/Y"); ?>
<?php echo date_format(date_create($_GET["reqDatesEn"]), "d/m/Y"); ?>

最后两次抛出错误

致命错误:未捕获类型错误:date_format():参数 #1 ($object) 必须是 DateTimeInterface 类型 ...

我只是不明白为什么前 2 个工作,但最后 2 个抛出错误。我缺少什么区别?

【问题讨论】:

    标签: php


    【解决方案1】:

    date_create 只识别格式 m/d/Y 而不是 d/m/Y。如果月份大于 12,则会发生错误。 bool(false) 不是 DateTime 对象并且没有格式化方法。

    var_dump(date_create("08/01/2023"));
    //object(DateTime)#2 (3) { ["date"]=> string(26) "2023-08-01 00:00:00.000000"
    
    var_dump(date_create("15/01/2023"));
    // bool(false)
    

    解决方案:使用 DateTime::createFromFormat 或 date_create_from_format。

    $_GET["reqDatesSt"] = "15/01/2023";  //Use assignments to $_GET for testing purposes only
    echo date_format(date_create_from_format("d/m/Y",$_GET["reqDatesSt"]), "d/m/Y");
    //15/01/2023
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-30
      • 2022-12-16
      • 2018-03-28
      • 1970-01-01
      相关资源
      最近更新 更多