尝试向DateTime对象添加DateInterval时出现PHP致命错误

尝试向DateTime对象添加DateInterval时出现PHP致命错误,php,datetime,add,dateinterval,Php,Datetime,Add,Dateinterval,我做错了什么 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('\'

我做错了什么

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(newdateinterval)
中遇到格式错误

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

有几件事:

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

        公共字符串格式(string$格式)
        。它返回一个字符串

      • 您不需要重新分配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');