【问题标题】:Adding number of days to current date [duplicate]将天数添加到当前日期[重复]
【发布时间】:2013-03-20 08:50:19
【问题描述】:

我想在当前日期添加几天。我使用以下代码。

$arrSearchValues=1000;

$datToDate = date('Y-m-d', strtotime("+$arrSearchValues days"));

在天数超过 9070 之前一切正常。超过此数字的结果日期为“1970-01-01”。有什么办法可以解决这个问题吗?请帮我举个例子

【问题讨论】:

    标签: php


    【解决方案1】:

    2038 年 1 月 19 日是一个特殊的日子:那天,32 位日期/时间实现基于 Unix time run out of bits 来表示日期和时间,这就是为什么加法溢出并将结果重置为Unix 时代的开始(1970 年 1 月 1 日)。

    要绕过此限制,请改用DateTime 和朋友:

    $d = new DateTime();
    $d->modify("+10000 days");
    echo $d->format("Y-m-d");
    

    【讨论】:

    • @GarethCornish:我愿意,谢谢。 :)
    • @Jon 使用 DateTime 是对的,但它不会修改时间戳..我的意思是答案会是错误的.. 显示错误不是很好吗?
    • Thangs jon. 这对我来说很完美
    • @new_developer: DateTime 工作正常,没有错误显示。
    【解决方案2】:

    根据http://php.net/manual/en/function.strtotime.php

    时间戳的有效范围通常是从 1901 年 12 月 13 日星期五 20:45:54 UTC 到 2038 年 1 月 19 日星期二 03:14:07 UTC。 (这些日期对应于 32 位有符号整数的最小值和最大值。)

    9070 天后,您的时间戳超出范围,因此您没有获得有效的时间戳,因此出现错误

    如果时间戳无效,您会显示错误

    $arrSearchValues = 1000;
    if(strtotime("+$arrSearchValues days"))
    {
       $datToDate = date('Y-m-d', strtotime("+$arrSearchValues days"));
    }
    else
    {
        echo "Out of range";
    }
    

    【讨论】:

      【解决方案3】:

      试试这个,应该是最快的方法:

      $arrSearchValues=time()+1000*24*60*60;
      $datToDate = date('Y-m-d', $arrSearchValues);
      

      抱歉,我忘了使用 time(),检查更新的代码。

      【讨论】:

        猜你喜欢
        • 2017-12-03
        • 1970-01-01
        • 2013-04-01
        • 2014-05-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多