提问人:raveren 提问时间:6/23/2023 更新时间:6/23/2023 访问量:35
PHP Carbon 日期时间对象比较是如何工作的?
How does PHP Carbon datetime object comparison work?
问:
根据 Carbon 文档:
$first = Carbon::create(2012, 9, 5, 23, 26, 11);
$second = Carbon::create(2012, 9, 5, 20, 26, 11, 'America/Vancouver');
var_dump($first <= $second); // bool(true)
后一种比较有效!!为什么?
我在互联网上能找到的只是
通过按定义的顺序递归比较对象的属性来比较对象,包括公共属性、受保护属性和私有属性。
所以我怀疑该实例将 datetime [*] 作为其第一个属性,因此对其进行了比较,但这引发了很多问题,我无法“介入”与 XDebug 的比较。Carbon
2012-09-05 23:26:11
有人对此有一个很好的解释吗?
[*]ISO 格式的日期可以以字符串形式进行比较。
答:
0赞
raveren
6/23/2023
#1
好的,在写完这个问题之后,我想我可能已经找到了答案,根据 PHP 文档:
https://www.php.net/manual/en/datetime.diff.php#example-2091
注意:
可以使用比较运算符比较 DateTimeImmutable 和 DateTime 对象。
这导致:
https://www.php.net/manual/en/language.operators.comparison.php#language.operators.comparison.types
内置类可以定义自己的比较。
和
class Carbon extends DateTime // ...
因此,Carbon 扩展了一个内置类,该类支持其对象之间的比较。
这种比较之所以有效,是因为PHP开发人员对对象做了一个例外,并将其硬编码为PHP语言的C源代码。DateTime
评论
0赞
Álvaro González
6/24/2023
我不会将其描述为例外,但仅此而已。不过,根据我的经验,我发现将两个操作数都转换为 UTC 更可靠。在一些地方存在一些微妙的错误,与 DST 和比较中跨越时区边界有关。
0赞
raveren
6/26/2023
“我不会将其描述为例外” - “例外” - 名词,被排除在一般陈述之外或不遵守规则的人或事物。
0赞
raveren
6/26/2023
此外,Carbon 还负责时区转换,因为它在其文档中引用的示例中特意而优雅地演示了这一点。
评论