我在这里做错了什么?
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)
在此帖子的开头抛出了错误。
答案 0 :(得分:2)
一些事情:
format()
返回一个字符串,因此您不能在结果上使用add()
,因为它不是对象。您需要$ts->add()
代替。DateInterval
构造函数的正确语法;至少你需要摆脱你的字符串周围的引号。add()
方法时,您修改了对象,因此将其分配给另一个变量是没有意义的,除非您先将其克隆。现在,$ts
(请参阅我的第一点)和$lamDate
都将引用相同的对象。答案 1 :(得分:1)
DateTime->format()
具有以下方法签名:
public string format ( string $format )
。它返回一个字符串。
我已经修改了代码的顺序和变量名称以使事情变得清晰:
// 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";
答案 2 :(得分:0)
: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');