第一次发布问题,我有一点蛋糕经验,但我远非精通。在我的模型 - 产品中,我使用 afterFind 回调进行一些计算。首先,它检查产品的保修期是否仍然有效(startDate +warranty_period),然后计算保修期还剩多少。为此,我使用:
$future = '+'.$results[$key]['Product']['warranty_period'].'months';
$startDate = $results[$key]['Product']['created'];
$endDate = date('Y-m-d', strtotime($future, strtotime($startDate)));
$curDate = date('Y-m-d');
if($endDate > $curDate){
$date1 = new DateTime($endDate);
$date2 = new DateTime($curDate);
$interval = $date1 -> diff($date2);
默认情况下,$interval 作为数字字符串返回,例如 '01119'。然后我运行下面的代码来输出它:0年,11个月,19天。
//years
if($interval->y > 0){
$years = $interval->y.' years, ';
}
//months
if($interval->m > 0){
$months = $interval->m.' months, ';
}
//days
if($interval->d > 0){
$days = $interval->d.' days';
}
$results[$key]['Product']['warranty_time'] = $years.$months.$days;
}else{
$results[$key]['Product']['warranty_time'] = 'Expired';
}
然后将这些计算的结果传递到 afterFind 返回的 $results 数组中。这是我的实际问题:我将如何根据剩余的保修时间对 $results 数组进行排序?
我在其他一些字段上使用 Paginator,使用 echo $this->Paginator->sort('name', Name); 这可以很好地对记录 ASC 或 DESC 进行快速排序,但我无法让它与我的warranty_time 字段一起使用。我怀疑这可能是因为 cake 将 $interval 视为字符串,而不是 int 或其他数字数据类型。
我认为似乎 $interval 被返回为“数字”,例如“01119”,是否可以根据该数字对数组进行排序,然后在视图中进行格式化?这样做的最佳方法是什么?