[英]What is the difference between 2 days and 48 hours in php
$new_date = date('Y-m-d', strtotime("+2 days"));
要么
$new_date = date('Y-m-d', strtotime("+48 hours"));
它们是相同还是不同
它们是相同还是不同
他们是完全不同的。 客观地说,2天并不总是等于48小时 。
考虑跨越日光节约边界。
例如, 2019-04-07T02:00:00+1100
(AEDT - > AEST)
$twoDays = new DateInterval('P2D');
$fortyEightHours = new DateInterval('PT48H');
$ref = new DateTimeImmutable('2019-04-07T01:00:00',
new DateTimeZone('Australia/Melbourne'));
echo 'Reference: ', $ref->format('r'), PHP_EOL;
echo 'Plus 2 days: ', $ref->add($twoDays)->format('r'), PHP_EOL;
echo 'Plus 48 hours: ', $ref->add($fortyEightHours)->format('r'), PHP_EOL;
这产生了
Reference: Sun, 07 Apr 2019 01:00:00 +1100
Plus 2 days: Tue, 09 Apr 2019 01:00:00 +1000
Plus 48 hours: Tue, 09 Apr 2019 00:00:00 +1000
注意,HHVM由于某种原因产生不同的结果
这个与常见日期/时间相关的虚假列表值得一试〜https ://github.com/kdeldycke/awesome-falsehood#dates-and-time
值得指出的是,使用相同的参考日期并使用strtotime()
会产生与上述相同的结果。
我怀疑这是因为它的相对时间计算不像DateInterval
那样微妙。
在语义上它们是不同的,正如菲尔在另一个答案中所证明的那样。 这意味着在其他一些图书馆中,这种差异是真实的。
但是, strtotime()的实现并未考虑到这一点,因此,根据您的示例,它没有任何区别。
我感兴趣的是它是否可以通过源代码进行跟进,所以这里是:
strtotime()的实现做到了这一点:
+2 days
或+48 hours
,这被认为是相对文本 。 do_range_limit(0, 24, 24, &time->h, &time->d)
,如果小时数超过硬编码限制(24小时do_range_limit(0, 24, 24, &time->h, &time->d)
,则增加天数和减少小时数,并且几天内do_range_limit_days() ,增加如果我们超过极限,则考虑到跳跃时间(但不是时区!)。 +48 hours
或+2 days
完成,我们就不知道了。 因此没有区别。 TLDR:strtotime()在进行转换时不考虑时区,因此在该函数中它没有任何区别,即使它真的应该。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.