【问题标题】:CakePHP 3.6: Object of class Cake\I18n\FrozenTime could not be converted to intCakePHP 3.6:Cake\I18n\FrozenTime 类的对象无法转换为 int
【发布时间】:2019-01-24 13:56:43
【问题描述】:

我正在尝试检查index.ctp 中的日期是否晚于一周前:

(((!isset($task->date_end) || is_null($task->date_end))? 
        strotime('now') : $task->date_end) > strtotime('-1 week'))

但我收到此错误:

Cake\I18n\FrozenTime 类的对象无法转换为 int

为了检查数据库中的日期是否有问题,我将它们全部更改为:2019-01-02 05:06:00.000000

【问题讨论】:

    标签: php cakephp time


    【解决方案1】:

    当你将非整数与整数进行比较时,PHP 的类型杂耍会尝试将前者转换为整数,而FrozenTime 对象无法转换为整数。

    您可以通过一直使用日期对象来避免这种脆弱的构造,并使用它们提供的比较方法,例如。

    $result = true;
    if ($task->date_end !== null) {
        $lastWeek = \Cake\I18n\Time::now()->subWeek(1);
        $result = $task->date_end->gt($lastWeek);
    }
    

    另见

    【讨论】:

    • 另外,通过使用TimeDate 对象而不是strtotime,您可以使用setTestNow 更轻松地构建可靠的单元测试。
    猜你喜欢
    • 2019-05-02
    • 2017-03-08
    • 2019-01-31
    • 1970-01-01
    • 1970-01-01
    • 2016-11-16
    • 2017-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多