我按日期时间排序事件列表工作正常,但是当某些项目有时区应用时会出现问题 - 他们没有正确排序。 E.g。
活动1 - 结束于2018年6月20日15:00:00(欧洲/伦敦)
活动2 - 结束于2018年6月20日13:00:00(美国/东部)
当这些按日期升序排序时'事件2'显示之前'事件1'因为时区被忽略(实时是2小时后)
我尝试在Laravel中使用mutator将日期时间和时区转换为时间戳:
public function getDatetimeTzSecondsAttribute()
{
$newDate = new Carbon($this->attributes['date_finish'], $this->attributes['timezone']);
return $newDate->toTimeString();
}
但是理解这一点不会起作用,因为在获取结果后处理变异器。我正在使用分页结果 - 如果可能的话,通过查询构建器/ eloquent订购此数据的最佳方式是什么?
答案 0 :(得分:0)
如果对任何人有帮助,我会在经过几个小时的脑痛后想出一个非常简单的解决方案......
使用MySQL' CONVERT_TZ'功能从时区设置更改为UTC:
->selectRaw('*, CONVERT_TZ(date_finish, timezone, \'UTC\') AS date_finish_converted ')
然后按新转换的日期列(如果已设置)和标准日期列进行排序:
->orderByRaw('COALESCE(date_finish_converted, date_finish), date_finish');
天才! :)