【问题标题】:PHP date_diff returns unusual warningPHP date_diff 返回异常警告
【发布时间】:2014-08-07 12:51:38
【问题描述】:

有很多关于date_diff PHP 函数的问题。但我的似乎有点不同,因为我得到了一个相当不寻常的结果。以下是我的代码:

$today = date( 'd-m-Y', strtotime( "now" ) );
$selectDay = date( 'd-m-Y', strtotime( $row->BOOKING_DATE ));
$interval = date_diff( $selectDay, $today );

我得到的结果:

Warning: date_diff() expects parameter 1 to be DateTime, string given in...

如您所见,$today 和 $selectDay 都是日期。有什么建议? 注意:我有 PHP 5.3 版

【问题讨论】:

标签: php datetime date-math


【解决方案1】:

错误信息很清楚。 date_diff() 需要 DateTime() 对象,但您传递的是字符串。

$today     = new DateTime();
$selectDay = new DateTime($row->BOOKING_DATE);
$interval  = date_diff( $selectDay, $today );

或者:

$today     = new date_create();
$selectDay = new date_create($row->BOOKING_DATE);
$interval  = date_diff( $selectDay, $today );

或者:

$today     = new DateTime();
$selectDay = new DateTime($row->BOOKING_DATE);
$interval  = $today->diff( $selectDay );

【讨论】:

  • 您错过了 $today 的 ;
  • @sri 哎呀。正确的。修复了所有三个示例。感谢您指出这一点。
  • 在回显 $interval 时,我得到`可捕获的致命错误:DateTime 类的对象无法在...中转换为字符串`。有什么想法吗?
  • 尝试使用var_dump() 而不是echo。它是一个对象而不是一个字符串。但是如果你想格式化你需要使用DateInterval::format()
【解决方案2】:

date 以字符串形式返回 UNIX 时间戳的文本表示。

date_diff 需要一个 DateTime 对象,如此处所述:

http://php.net/manual/en/class.datetime.php

顺便说一句,

date( 'd-m-Y', strtotime( "now" ) )

相当于date('d-m-Y')

【讨论】:

    【解决方案3】:

    在传入date_diff()函数参数之前使用date_create()函数

    $today = date( 'd-m-Y', strtotime( "now" ) );
    $selectDay = date( 'd-m-Y', strtotime( $row->BOOKING_DATE ));
    $interval = date_diff( date_create($selectDay), date_create($today) );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-06
      • 2021-10-22
      • 1970-01-01
      • 2015-05-16
      • 2023-03-17
      相关资源
      最近更新 更多