【问题标题】:Weird results for Nesbot Carbon diffInHoursNesbot Carbon diffInHours 的奇怪结果
【发布时间】:2021-03-13 03:57:36
【问题描述】:

我正在为 SO 上的另一个问题做一些 tinkering。并且对 Carbon 的 diffInHours 有一些奇怪的行为。前面时间的差异与过去的时间差异不同。这是我的修补命令和返回值:

>>> \Carbon\Carbon::now()->diffInHours(\Carbon\Carbon::now()->addHours(3))
=> 3
>>> \Carbon\Carbon::now()->addHours(3)->diffInHours(\Carbon\Carbon::now())
=> 2
>>> \Carbon\Carbon::now()->addHours(3)->diffInHours(\Carbon\Carbon::now())
=> 2
>>> \Carbon\Carbon::now()->addHours(3)->diffInHours(\Carbon\Carbon::now())
=> 2
>>> \Carbon\Carbon::now()
=> Carbon\Carbon @1595427497 {#4431
     date: 2020-07-22 14:18:17.952594 UTC (+00:00),
   }

有没有人知道是什么导致了这种行为?

【问题讨论】:

  • 有些东西diffInRealHours \Carbon\Carbon::now()->diffInRealHours(\Carbon\Carbon::now()->addHours(3)) || addRealHouraddRealHours \Carbon\Carbon::now()->addRealHour(3)->diffInHour(\Carbon\Carbon::now()) 两种方法都将小时指定为 integer。我认为 floatDiffInHours 更正确地给出小时,它的给出小时为float
  • @STA 谢谢,我刚刚阅读了他们的文档,并进行了一些修改。很高兴知道!

标签: php laravel php-carbon tinker


【解决方案1】:
\Carbon\Carbon::now()->addHours(3)->diffInHours(\Carbon\Carbon::now();

让我们分解它以弄清楚发生了什么:

1- 你得到代表现在的日期时间。

2- 你增加了 3 个小时。结果将是现在 + 3 小时。

3- 你会得到 diffInHours 和 'now'(witch 与第一个 'now' 相差几分之一秒)witch 将是 2.9999999180556

4- diffInHours 将结果向下舍入 (as in doc),结果将为 2 ..

如果你想在不四舍五入的情况下获得真正的差异,你可以使用 floatDiffInRealHours,它会给你 2.9999999180556

问题是两个 \Carbon\Carbon::now() 被调用之间的延迟。如果您使用复制的 Carbon 实例,您可以看到没有问题:

>>> $now = \Carbon\Carbon::now()
=> Carbon\Carbon @1595429110 {#4367
     date: 2020-07-22 14:45:10.767156 UTC (+00:00),
   }
>>> $threeHoursFromNow = $now->copy()->addHours(3)
=> Carbon\Carbon @1595439910 {#4428
     date: 2020-07-22 17:45:10.767156 UTC (+00:00),
   }
>>> $now->diffInHours($threeHoursFromNow)
=> 3
>>> $threeHoursFromNow->diffInHours($now)
=> 3

【讨论】:

  • 这是有道理的。我刚刚得出了同样的认识,并将为您的答案添加一些进一步的证据。我想我当时精神错乱了:)
  • 很好的解释
猜你喜欢
  • 1970-01-01
  • 2016-11-28
  • 2012-12-16
  • 2012-12-06
  • 2016-08-24
  • 2018-01-24
  • 2021-03-01
  • 2014-08-17
  • 1970-01-01
相关资源
最近更新 更多