0

我一直在尝试解决从 Amazon API 保存的数据库数据的问题。数据是使用 cron 作业获取的,预定义的日期范围从前一年到 2021 年 6 月。我的问题是,我无法使用 Laravel 碳日期获得准确的结果。我不确定我到底做错了什么。在某些日期范围内,我可以获得准确的结果,但是当我更改日期时,结果不正确。因此,例如,当我查询 6 月 1 日至 6 月 30 日的数据时,我可以获得准确的结果,并且可以通过直接从 Amazon API 获取数据时使用相同日期范围比较结果来确认它,但是当我更改它时假设到6月5日-6月22日,结果不再准确。我怀疑这是因为我使用了错误的日期格式,但老实说我不知道​​要使用的正确格式。我尝试了很多格式,但失败了。这是从亚马逊返回的示例日期格式

  1. 2021-06-18T14:35:33+00:00
  2. 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')  

并且还尝试按原样保存(意思只是保存到字段,字段类型是日期时间)

我的问题是,

  1. 你如何使用 laravel carbon 格式化日期以获得准确的结果
  2. 目前我的默认用户住在柏林/德国,如果用户是从不同的地方和时区添加的,你如何动态调整日期格式?
  3. 用户的日期(时间选择器)基于本地日期,这可能是我无法获得准确结果的原因吗?

更新:

在比较了 2020-2021 年(例如 --month=June --year=2021、--month=March --year=2020)的每月时间范围后,我注意到 2020 年和 2021 年 6 月的结果不一致。其他月份完全没问题。这让我再次感到困惑。

4

0 回答 0