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');
我在这里做错了什么?
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');