Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php中2天和48小时的区别是什么_Php_Date - Fatal编程技术网

php中2天和48小时的区别是什么

php中2天和48小时的区别是什么,php,date,Php,Date,或 $new_date=date('Y-m-d',strottime(+48小时)); 它们是相同的还是不同的 它们是相同的还是不同的 他们完全不同客观地说,2天并不总是等于48小时 考虑跨越夏令时边界 例如,2019-04-07T02:00:00+1100(AEDT->AEST) $twoday=新的日期间隔('P2D'); $fortyEightHours=新的日期间隔('PT48H'); $ref=新日期时间不可变('2019-04-07T01:00:00', 新日期时区(“澳大利亚/墨

$new_date=date('Y-m-d',strottime(+48小时));
它们是相同的还是不同的

它们是相同的还是不同的

他们完全不同客观地说,2天并不总是等于48小时

考虑跨越夏令时边界

例如,
2019-04-07T02:00:00+1100
(AEDT->AEST)

$twoday=新的日期间隔('P2D');
$fortyEightHours=新的日期间隔('PT48H');
$ref=新日期时间不可变('2019-04-07T01:00:00',
新日期时区(“澳大利亚/墨尔本”);
echo“Reference:”,$ref->format('r'),PHP_EOL;
echo'Plus 2 days:',$ref->add($twoday)->format('r'),PHP_EOL;
echo“加上48小时:”,$ref->add($fortyeyighthours)->格式('r'),PHP_EOL;
这就产生了

参考:太阳,2019年4月7日01:00:00+1100
加上2天:2019年4月9日星期二01:00:00+1000
加48小时:2019年4月9日星期二00:00:00+1000
注意,由于某些原因,HHVM会产生不同的结果

演示~

这张与日期/时间相关的常见错误列表值得一看~


值得指出的是,使用相同的参考日期并使用
strotime()
对其进行操作会产生与上述结果不同的结果

演示~


我怀疑这是因为它的相对时间计算不像
DateInterval

那样细致,语义上它们是不同的,如另一个答案中的所示。这意味着在其他一些解释这种差异的库中,这种差异是真实存在的

但是,的实现并没有考虑到这一点,因此以您的示例为例,这并没有什么区别

我感兴趣的是,是否可以通过源代码进行后续操作,因此:

strtotime()的实现实现了以下功能:

  • ,调用以创建初始ts构造
  • timelib_strotime()调用以分析字符串
  • 它读取您给它的字符串,它得到的一个标记是您的
    +2天
    +48小时
    ,这两个标记都是
  • 因为relativetext,除其他外,被称为
  • 它从中进行查找,使用查找结果发现您提供了类型为TIMELIB_DAY、值1、乘数2的构造,或类型为TIMELIB_HOUR、值1、乘数24的构造
  • 这个构造将被传递,直到strotime与它(以及时区信息!)
  • 我们必须采取行动。我们没有使用时区参数,我认为这是一个严重的错误
  • 对于小时,如果超过24小时的硬编码限制,则增加天数并减少小时;对于天,如果超过限制,则增加月份并减少天数,同时考虑闰时间(但不考虑时区!)
  • 在返回timelib_update_ts时,我们使用了时区参数,但此时我们已经进行了所有调整,我们不知道是在
    +48小时内完成的,还是在
    +2天内完成的。因此,这没有什么区别


  • TLDR:strotime()在进行转换时不考虑时区,因此在该函数中,它没有任何区别,即使它确实应该这样做。

    像这样回显
    回显日期('Y-m-d H:i:s',strotime(+48小时))并检查差异并非每天都是24小时。夏令时。两天48小时在现实生活中根本不一样。诚然,他们经常是这样,但没有这样的保证。也就是说,你试过什么?你的结果是什么?出于好奇:你真正的问题是什么?
    strotime(“+2天”)
    它将增加2天的时间
    strotime(“+48小时”)
    它将增加48小时的时间,这正是我想要的X+1的d答案,考虑到这个问题是关于strotime(),您的代码不应该使用相同的函数来演示这个问题吗?@eis我能看到的唯一问题是“在php中2天和48小时有什么区别?”。OP只是提供了一个例子,但我不认为他们在寻找一个
    strotime()
    特定的答案除了上面@Phil提到的以外,最好使用PHP提供的DateTime功能,而不是strotime。我猜strotime的代码中有固定的常量,这会使表达式等效,即使它们在语义上不应该是
    $new_date = date('Y-m-d', strtotime("+2 days"));