我们使用MySQL DB运行了一个Laravel应用程序。DB由许多与不同主题相关的条目组成。这样做的想法是,每个项目都有自己的时区,并输出相应格式化日期的相关条目。因此,为了能够更改时区,为了兼容起见,所有条目都存储在UTC时区中(app默认时区也被设置为UTC )。问题是,例如,我们需要获得今天的条目,但是在项目的时区中,不是UTC。我们使用碳,但它只是格式的输出日期,并仍然比较它们在UTC时区。例如,在世界协调时,12月7日,22.32日有一个条目。但根据欧洲/莫斯科的说法,这是在12月8日,01.32,它应该被认为是今天的进入与欧洲/莫斯科时区的一个项目。尽管如此,即便莫斯科给出了时区,碳仍将其视为昨日的入场券(根据UTC的说法)。我们在查询中使用whereDate:
whereDate( 'created_at', Carbon::now($project->timezone)->startOfDay() )问题是碳在碳::现在(‘UTC’)和碳::现在(‘欧洲/莫斯科’)之间没有区别。如果你比较它们,它会给出零值:
$tz1 = Carbon::now('UTC');
$tz2 = Carbon::now('Europe/Moscow');
echo tz1->diffInHours(tz2) //0我错过了什么?我该怎么做才好呢?
发布于 2021-12-08 06:57:17
$tz1和$tz2都有时区信息,并且都包含now()时间的信息。这就是为什么没有区别。使用shiftTimezone()检索后,更改时区数据以使其正常运行。所以
$tz1 = Carbon::now('UTC');
$tz2 = Carbon::now('Europe/Moscow')->shiftTimezone('UTC');
echo tz1->diffInHours(tz2) //should be appropriate https://stackoverflow.com/questions/70270775
复制相似问题