试图将DateInterval添加到DateTime对象时发生PHP致命错误


PHP Fatal error when trying to add a DateInterval to a DateTime object

我做错了什么?

PHP致命错误:在中的非对象上调用成员函数add()

    $rndM = rand(48,51);
    $rndS = rand(1,59);
    $ts = new DateTime($krow['GLSTRT']);
    $tsd = $ts->format('Y-m-d H:i:s');
    $tsup = 'PT'.$rndM.'i'.$rndS.'s';
    $lamDate= $tsd->add(new DateInterval(''''.$tsup.''''));

$krow['GLSTRT']是来自MSSQL的数据值。

起初,我收到了add(new DateInterval)的格式错误。

我在format行中添加了,它解决了格式错误,现在add(new DateInterval)在本文开头抛出了错误。

几件事:

  • format()返回一个字符串,因此不能对结果使用add(),因为它不是对象。您需要$ts->add()
  • 您应该检查DateInterval构造函数的正确语法;至少你需要去掉字符串周围的引号
  • 当您使用add()方法时,您将修改对象,因此将其分配给另一个变量是没有意义的,除非您先克隆它。现在$ts(参见我的第一点)和$lamDate都将引用同一个对象
  • DateTime->format()具有以下方法签名:

    public string format ( string $format )。它返回一个字符串。

  • 您不需要重新分配DataTime对象来使用它。


我对代码和变量名的顺序进行了一点修改,以使事情变得清晰:

// create new datetime object and return formatted date
$date = new DateTime($krow['GLSTRT']);
echo $date->format('Y-m-d H:i:s') . "'n";
// define interval string and create a new DateInterval object
$rndM = rand(48,51);
$rndS = rand(1,59);
$intervalString = 'PT' . $rndM . 'i' . $rndS . 's';
$intervalObject = new DateInterval($intervalString); 
// add interval to date object  
$date ->add($intervalObject); 
// return the modified value formatted  
echo $date->format('Y-m-d H:i:s') . "'n";

:刘海:谢谢大家。这就是我匆忙修复的结果。这是最终产品。

    $ts = new DateTime($krow['GLSTRT']);
    $intervalString = 'PT' . $rndM . 'M' . $rndS . 'S';
    $ts ->add(new DateInterval($intervalString));
    $lamDate = $ts->format('Y-m-d H:i:s');