我一直在尝试解决从 Amazon API 保存的数据库数据的问题。数据是使用 cron 作业获取的,预定义的日期范围从前一年到 2021 年 6 月。我的问题是,我无法使用 Laravel 碳日期获得准确的结果。我不确定我到底做错了什么。在某些日期范围内,我可以获得准确的结果,但是当我更改日期时,结果不正确。因此,例如,当我查询 6 月 1 日至 6 月 30 日的数据时,我可以获得准确的结果,并且可以通过直接从 Amazon API 获取数据时使用相同日期范围比较结果来确认它,但是当我更改它时假设到6月5日-6月22日,结果不再准确。我怀疑这是因为我使用了错误的日期格式,但老实说我不知道要使用的正确格式。我尝试了很多格式,但失败了。这是从亚马逊返回的示例日期格式
- 2021-06-18T14:35:33+00:00
- 2021-06-18T15:08:11+00:00
默认情况下,laravel 的时区'timezone' => 'UTC'在配置文件中全局使用。我的用户住在德国柏林,所以我在查询数据库时使用 Europe/Berlin
我尝试了以下方法:
$start = Carbon::parse("$from Europe/Berlin")->tz('UTC')->format('Y-m-d H:i:s');
$end = Carbon::parse("$to Europe/Berlin")->endOfDay()->tz('UTC')->format('Y-m-d H:i:s');
然后我用它来查询表,比如
->whereBetween('purchase_date',[$start, $end])
我还尝试格式化从亚马逊返回的日期,例如
Carbon::parse($value['date'])->format('Y-m-d H:i:s')
并且还尝试按原样保存(意思只是保存到字段,字段类型是日期时间)
我的问题是,
- 你如何使用 laravel carbon 格式化日期以获得准确的结果
- 目前我的默认用户住在柏林/德国,如果用户是从不同的地方和时区添加的,你如何动态调整日期格式?
- 用户的日期(时间选择器)基于本地日期,这可能是我无法获得准确结果的原因吗?
更新:
在比较了 2020-2021 年(例如 --month=June --year=2021、--month=March --year=2020)的每月时间范围后,我注意到 2020 年和 2021 年 6 月的结果不一致。其他月份完全没问题。这让我再次感到困惑。