嗨,我遇到了一个问题,我试图获取作业所花费的总时间(使用数据库字段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
。