【问题标题】:PHP Fatal error when trying to add a DateInterval to a DateTime object尝试将 DateInterval 添加到 DateTime 对象时出现 PHP 致命错误
【发布时间】:2015-10-31 12:48:11
【问题描述】:

我在这里做错了什么?

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) 在本文开头抛出错误。

【问题讨论】:

    标签: php datetime add dateinterval


    【解决方案1】:

    一些事情:

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

    【讨论】:

      【解决方案2】:
      • 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";
      

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-07-12
          • 2021-07-29
          • 1970-01-01
          • 2012-11-01
          • 1970-01-01
          • 2020-06-11
          • 1970-01-01
          • 2016-06-14
          相关资源
          最近更新 更多