使用php计算两次之间的差异,然后将其添加到总时间类型中


Calculating the difference between two times using php, and then adding it to a total of time type

嗨,我遇到了一个问题,我试图获取作业所花费的总时间(使用数据库字段job_start和job_end time(7))然后将其添加到另一个模型的领域,

我的代码是

 if (isset($_POST['Jobs'])) {
        $model->attributes = $_POST['Jobs'];
        $model->setScenario('closejob');
        $model->status = 2; //set status to closed
        //date time difference - this is the part I need help with 
        $diff = $model->job_start - $model->job_end;
        //need to get customer model and add time diff to it 
        $customermodel = Customers::model()->findByPk($model->customer_ID);
        $customermodel->total_time = $customermodel->total_time + $diff;
        $customermodel->save();

        if ($model->save())
            $this->redirect(array('view', 'id' => $model->job_ID));
    }

我尝试过字符串到时间和其他日期函数,但没有成功,上面的代码抛出了以下错误

CDbCommand无法执行SQL语句:SQLSTATE[22007]:[Microsoft][SQL Server Native Client 11.0][SQL Server]从字符串转换日期和/或时间时转换失败。。

有什么合适的方法吗?也就是说,我是不是把时间加起来,然后计算差值都错了?

我认为这与将字符串转换为时间格式有关,但我不确定如何进行

也许你必须进行

$diff = $model->job_end - $model->job_start;

代替

$diff = $model->job_start - $model->job_end;

除非您有该模型的附加行为,否则您的job_start和job_end属性很可能是根据MSSQL格式化的字符串,假设列类型是日期/时间表示。这当然是CActiveRecord模型与MySQL和DATETIME类型的Yii一起工作的方式。

要实现差异,您需要首先转换。看看CDateFormatter,并使用它将属性转换为允许算术的数字表示。

如果您无法让Xdebug工作,那么请投入时间让Yii::log()函数工作(默认情况下,它将输出到runtime/application.log