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

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).

的格式错误

我添加了格式行,这解决了格式错误,现在 add(new DateInterval) 在此 post.

的开头抛出错误

几件事:

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

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

  • 您无需重新分配 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";

:banghead: 谢谢你们。这就是我匆忙修复的结果。这是最终产品。

    $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');