【问题标题】:Strange php date sum behavior奇怪的php日期和行为
【发布时间】:2014-08-27 11:15:30
【问题描述】:

为什么在使用 13 年 10 月 25 日时这个总和只有 4 天,而在使用其他日期时只有 5 天(如预期)?

<?php
    echo date('d-M-y',(strtotime('25-Oct-13') + (432000)));
?>

【问题讨论】:

  • 夏季和冬季
  • 那么,再增加一小时应该可以解决这个问题吗?
  • 您可以使用strtotime()的功能:25-Oct-13 + 5days
  • 请参阅php.net/manual/en/function.strtotime.php 以获取有关上述评论的更多信息
  • 我能够根据您的代码将确切的 5 天添加到日期

标签: php date sum


【解决方案1】:

这取决于您的时区。在某些地区,十月的最后一个星期六是夏令时 (DST) 的结束。因此,2013 年 10 月 26 日至 27 日晚上可能会或可能不会包含额外的时间。

通过添加实际天数而不是小时数来规避此问题:

$myDate = new \Datetime('2013-10-25');
$myDate->add(new \DateInterval('P5D'));

This does return Oct 30th 2013.

More strange stuff can happen from incorrectly assuming that days are always exactly 24 hours.

【讨论】:

  • 我添加了这个:date_default_timezone_set('America/Adak');它现在工作正常。谢谢!
  • 更改时区并不是解决问题的根本方法。
  • 我不明白“基本解决方案”的含义,但只要它不会给我带来任何麻烦,它就是理想的。这是我对这些日期所做的唯一操作;永远不会使用/添加其他细节。
  • 基本解决方案的要点是它不会给您带来任何麻烦。在更改其他日期或在 Adak 中引入 DST 时,将时区更改为具有另一个 DST 规则的区域会导致灾难。如我的回答所述,基本的解决方案是用天而不是小时来计算。
  • 按你的方式做。有效(可能您已经知道 xD)。谢谢!
【解决方案2】:

$date = "2014-09-17";

echo date('Y-m-d', strtotime($date.' + 5 days'));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-15
    • 2020-05-02
    • 2015-02-21
    • 2014-03-18
    • 2014-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多