【问题标题】:Add 90 days to a Y-m-d H:i:s formatted date, in Unix Timestamp format将 90 天添加到 Y-m-d H:i:s 格式的日期,采用 Unix Timestamp 格式
【发布时间】:2014-09-22 05:59:19
【问题描述】:

如何将 90 天添加到预定义的 Y-m-d H:i:s 格式化日期并将其转换为 Unix 时间戳,以便我可以将其作为 setcookie() 的过期参数发送?

我尝试了以下方法:

var_dump(strtotime('+90 days', '1994-02-21 08:01:13'));

哪些输出:

注意:在第 3 行的 [文件路径] 中遇到格式不正确的数值。

int(7777994)

【问题讨论】:

    标签: php unix-timestamp strtotime


    【解决方案1】:

    使用 DateTime 您可以轻松地在 unix 时间戳或格式之间进行切换。

    $date = new DateTime("1994-02-21 08:01:13");
    $date->add(DateInterval::createFromDateString("90 days"));
    var_dump($date->getTimestamp()); // Prints: int(769593673)
    //var_dump($date->format("Y-m-d H:i:s")); // Prints: 1994-05-22 08:01:13
    

    【讨论】:

    • @salathe 奇怪的胡须间距是为了便于阅读。格式的个人偏好,防止我搞砸了。抱歉,您不喜欢它,但几乎不需要编辑它,因为它不会影响代码的正确运行,并且非常清楚哪个部分属于哪里。我的 5 美分在你的这个编辑上。 :)
    【解决方案2】:

    strtotime() 的第二个参数需要时间戳,而不是字符串。换句话说,你需要在第二个参数上调用strtotime(),像这样:

    var_dump(strtotime('+90 days', strtotime('1994-02-21 08:01:13')));
    

    更简单的解决方案(不使用第二个参数)也是可能的:

    var_dump(strtotime('1994-02-21 08:01:13 +90 days'));
    

    【讨论】:

      【解决方案3】:

      我将我的答案转换为默认为 90 天的函数,但可以接受任意天数。 由下一个编码员来解决任何错误纠正/检测

      date_default_timezone_set('America/New_York');
      
      function add_days($input,$days=90){
         $timestamp=strtotime($input);
         $future = $timestamp + (60*60*24*$days);
         //$future_string = date('Y-m-d H:i:s', $future);
         //return $future_string;
         return $future;
       }
      
      echo add_days('1994-02-21 08:01:13'); // default 90
      echo "\n";
      echo add_days('1994-02-21 08:01:13',10);  // 10, just to show a non-default return
      

      输出:

      1994-05-22 09:01:13
      1994-03-03 08:01:13

      769611673
      762699673
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-25
        • 1970-01-01
        • 2012-06-16
        • 1970-01-01
        相关资源
        最近更新 更多