【问题标题】:Adding days to $Date in PHP在 PHP 中将日期添加到 $Date
【发布时间】:2010-09-16 14:23:07
【问题描述】:

我有一个日期作为 mySQL 查询的一部分以2010-09-17 形式返回

我想将变量 $Date2 设置为 $Date5 如下:

$Date2 = $Date + 1

$Date3 = $Date + 2

等等。

这样它就会返回2010-09-182010-09-19 等...

我试过了

date('Y-m-d', strtotime($Date. ' + 1 day'))

但这给了我$Date之前的日期。

以“Y-m-d”格式获取我的日期以便在另一个查询中使用它们的正确方法是什么?

【问题讨论】:

标签: php date


【解决方案1】:

您所要做的就是像这样使用days 而不是day

<?php
$Date = "2010-09-17";
echo date('Y-m-d', strtotime($Date. ' + 1 days'));
echo date('Y-m-d', strtotime($Date. ' + 2 days'));
?>

而且输出正确:

2010-09-18
2010-09-19

【讨论】:

  • 它仅使用day 也能正确输出...date("Y-m-d", strtotime('2010-09-17 + 1 day')) -> 2010-09-18, date("Y-m-d", strtotime('2010-09-17 + 2 day')) -> 2010-09-19
  • 刚刚尝试过这种方式,它奏效了。我仍然不知道为什么在我最初尝试它的开始日期前一天得到了一个值。
  • 如果我有一个变量来表示要添加的天数怎么办?
  • @Carlos echo date("Y-m-d", strtotime($Date.' + '.$variable.' days'));
  • 不,这种方法根本不起作用。它正在返回 2004 年的某个日期。
【解决方案2】:

如果您使用的是 PHP 5.3,则可以使用 DateTime 对象及其 add 方法:

$Date1 = '2010-09-17';
$date = new DateTime($Date1);
$date->add(new DateInterval('P1D')); // P1D means a period of 1 day
$Date2 = $date->format('Y-m-d');

查看DateInterval constructor 手册页,了解如何构造其他时间段以添加到您的日期(2 天为'P2D',3 天为'P3D',依此类推)。

如果没有 PHP 5.3,您应该能够以您的方式使用strtotime(我已经对其进行了测试,它在 5.1.6 和 5.2.10 中都可以使用):

$Date1 = '2010-09-17';
$Date2 = date('Y-m-d', strtotime($Date1 . " + 1 day"));
// var_dump($Date2) returns "2010-09-18"

【讨论】:

  • 对不起,Daniel,但是网络服务器运行的是 php 5.2.6,所以这行不通
  • DateTime::construct 使用与strtotime 相同的机制来解析日期,因此您也可以使用不需要5.3 的new DateTime("+1 day $date")
  • 我不是有意对此投反对票,但不知怎的我做到了 =/
  • 这是 php 5.5+ 的实际答案
【解决方案3】:

从 PHP 5.2 开始,您可以将 modify 与 DateTime 对象一起使用:

http://php.net/manual/en/datetime.modify.php

$Date1 = '2010-09-17';
$date = new DateTime($Date1);
$date->modify('+1 day');
$Date2 = $date->format('Y-m-d');

添加月份时要小心......(在较小程度上,年份)

【讨论】:

  • 接受的答案只给出了 15000 多天的答案,当您添加 25000 多天时,这个答案也给出了答案..
  • 你也可以在 DateTimeImmutable() 上查询这个,你得到一个修改后的副本,而不会有改变原始文件的风险。
【解决方案4】:

这是一个小sn-p来演示日期修改:

$date = date("Y-m-d");
//increment 2 days
$mod_date = strtotime($date."+ 2 days");
echo date("Y-m-d",$mod_date) . "\n";

//decrement 2 days
$mod_date = strtotime($date."- 2 days");
echo date("Y-m-d",$mod_date) . "\n";

//increment 1 month
$mod_date = strtotime($date."+ 1 months");
echo date("Y-m-d",$mod_date) . "\n";

//increment 1 year
$mod_date = strtotime($date."+ 1 years");
echo date("Y-m-d",$mod_date) . "\n";

【讨论】:

【解决方案5】:

你也可以使用下面的格式

strtotime("-3 days", time());
strtotime("+1 day", strtotime($date));

您可以这样堆叠更改:

strtotime("+1 day", strtotime("+1 year", strtotime($date)));

请注意此方法与其他答案中的方法之间的区别:您可以将时间戳作为strtotime 的第二个参数传入,而不是连接值+1 day&lt;timestamp&gt;

【讨论】:

    【解决方案6】:

    使用变量表示天数

    $myDate = "2014-01-16";
    $nDays = 16;
    $newDate = strtotime($myDate . '+ '.$nDays.'days');
    echo new Date('d/m/Y', $soma); //format new date 
    

    【讨论】:

      【解决方案7】:

      这是您查询的最简单解决方案

      $date=date_create("2013-03-15"); // or your date string
      date_add($date,date_interval_create_from_date_string("40 days"));// add number of days 
      echo date_format($date,"Y-m-d"); //set date format of the result
      

      【讨论】:

        【解决方案8】:

        这里有一个简单的方法来解决这个问题。

        <?php
           $date = "2015-11-17";
           echo date('Y-m-d', strtotime($date. ' + 5 days'));
        ?>
        

        输出将是:

        2015-11-22
        

        从这里找到解决方案 - How to Add Days to Date in PHP

        【讨论】:

          【解决方案9】:

          都必须使用下面的代码:

          $nday = time() + ( 24 * 60 * 60);    
          echo 'Now:       '. date('Y-m-d') ."\n";    
          echo 'Next Day: '. date('Y-m-d', $nday) ."\n";
          

          【讨论】:

          • 你不应该这样做,最终你会遇到闰秒问题
          【解决方案10】:

          要为日期添加特定天数,请使用以下函数。

          function add_days_to_date($date1,$number_of_days){
              /*
              //$date1 is a string representing a date such as '2021-04-17 14:34:05'
              //$date1 =date('Y-m-d H:i:s'); 
              // function date without a secrod argument returns the current datetime as a string in the specified format
              */
              $str =' + '. $number_of_days. ' days';
              $date2= date('Y-m-d H:i:s', strtotime($date1. $str));
              return $date2; //$date2 is a string
          }//[end function]
          

          【讨论】:

            【解决方案11】:

            这行得通。您可以使用它几天、几个月、几秒钟,并根据需要重新格式化日期

            public function reformatDate($date, $difference_str, $return_format)
            {
                return date($return_format, strtotime($date. ' ' . $difference_str));
            }
            

            示例

            echo $this->reformatDate('2021-10-8', '+ 15 minutes', 'Y-m-d H:i:s');
            echo $this->reformatDate('2021-10-8', '+ 1 hour', 'Y-m-d H:i:s');
            echo $this->reformatDate('2021-10-8', '+ 1 day', 'Y-m-d H:i:s');
            

            【讨论】:

              猜你喜欢
              • 2013-11-18
              • 1970-01-01
              • 2019-01-17
              • 1970-01-01
              • 2011-08-31
              • 2011-05-31
              • 2015-12-02
              • 2010-11-28
              • 2011-10-15
              相关资源
              最近更新 更多