【问题标题】:Add number of days to a date将天数添加到日期
【发布时间】:2011-01-20 22:04:41
【问题描述】:

我想在当前日期加上天数: 我正在使用以下代码:

$i=30;
echo $date = strtotime(date("Y-m-d", strtotime($date)) . " +".$i."days");

但我得到的不是正确的日期,而是: 2592000

请提出建议。

【问题讨论】:

标签: php date


【解决方案1】:

这应该是

echo date('Y-m-d', strtotime("+30 days"));

strtotime

期望得到一个包含美国英语日期格式的字符串,并将尝试将该格式解析为 Unix 时间戳(自 1970 年 1 月 1 日 00:00:00 UTC 以来的秒数),相对于现在给出的时间戳, 或当前时间(如果没有提供 now)。

而date

返回根据给定格式字符串格式化的字符串,使用给定的整数时间戳或当前时间,如果没有给出时间戳。

查看手册页

及其函数签名。

【讨论】:

  • 我认为这会在跨越夏令时和其他有趣的日历项目时引起问题。它有点取决于上下文。您需要考虑一下您是否正在寻找 30 个 24 小时时段,当您跨越夏令时时,可能会将您放在晚上 11:00。
  • @JJRohrer 不,不会。 strtotime 将考虑配置时区的任何 DST。只有当您执行以下操作时,DST 才是一个问题:stackoverflow.com/questions/4066035
  • 点了。我到达了这个问题,试图解决一些更接近你所引用的问题的问题。我希望我的上述评论能让其他人认真考虑他们的日期计算 - 很容易忘记所有例外情况。
【解决方案2】:

请记住,由于夏令时而导致的时钟变化可能会给您在仅计算天数时带来一些问题。

这里有一个小 php 函数来处理这个问题:

function add_days($date, $days) {
    $timeStamp = strtotime(date('Y-m-d',$date));
    $timeStamp+= 24 * 60 * 60 * $days;

    // ...clock change....
    if (date("I",$timeStamp) != date("I",$date)) {
        if (date("I",$date)=="1") { 
            // summer to winter, add an hour
            $timeStamp+= 60 * 60; 
        } else {
            // summer to winter, deduct an hour
            $timeStamp-= 60 * 60;           
        } // if
    } // if
    $cur_dat = mktime(0, 0, 0, 
                      date("n", $timeStamp), 
                      date("j", $timeStamp), 
                      date("Y", $timeStamp)
                     ); 
    return $cur_dat;
}

【讨论】:

    【解决方案3】:

    您可以使用 PHP 中内置的 DateTime 类。它有一个名为“add”的方法,它的使用方法在手册中有详尽的演示:http://www.php.net/manual/en/datetime.add.php

    但它需要 PHP 5.3.0。

    【讨论】:

      【解决方案4】:

      你也可以试试:

      $date->modify("+30 days");

      【讨论】:

        【解决方案5】:
        $date = new DateTime();
        $date->modify('+1 week');
        print $date->format('Y-m-d H:i:s');
        

        或print date('Y-m-d H:i:s', mktime(date("H"), date("i"), date("s"), date("m"), date("d") + 7, date("Y"));

        【讨论】:

        • 此方法解决了跨越夏令时的问题。我不确定 php 是否考虑了其他时间怪癖,例如闰秒,但是,根据您的需要,如果您处理日历日,您可能最好使用 DateTime 与 StrToTime。
        • @chx 这个解决方案也更仔细地允许日期;例如,新的 DateTime('2016-12-09 10:35:58');来自数据库时间戳...
        【解决方案6】:

        您可以通过操作时间码或使用strtotime() 来实现。这是一个使用 strtotime 的示例。

        $data['created'] = date('Y-m-d H:i:s', strtotime("+1 week"));

        【讨论】:

          【解决方案7】:

          你可以使用 strtotime()
          $data['created'] = date('Y-m-d H:m:s', strtotime('+1 week'));

          【讨论】:

            【解决方案8】:

            这个应该不错

            function addDayswithdate($date,$days){
            
                $date = strtotime("+".$days." days", strtotime($date));
                return  date("Y-m-d", $date);
            
            }
            

            【讨论】:

            • 如果您需要快速解决方案并且不想创建函数,也可以将上述解决方案压缩在一行中。 echo date("Ymd",strtotime("+12days",strtotime(20130101)))
            【解决方案9】:
            $date = "04/28/2013 07:30:00";
            
            $dates = explode(" ",$date);
            
            $date = strtotime($dates[0]);
            
            $date = strtotime("+6 days", $date);
            
            echo date('m/d/Y', $date)." ".$dates[1];
            

            【讨论】:

              【解决方案10】:

              我知道这是一个老问题,但对于 PHP

              $date = '05/07/2013';
              $add_days = 7;
              $date = date('Y-m-d',strtotime($date) + (24*3600*$add_days)); //my preferred method
              //or
              $date = date('Y-m-d',strtotime($date.' +'.$add_days.' days');
              

              【讨论】:

                【解决方案11】:

                你可以试试这个。

                $i=30;
                echo  date("Y-m-d",mktime(0,0,0,date('m'),date('d')+$i,date('Y')));
                

                【讨论】:

                  【解决方案12】:
                  $today=date('d-m-Y');
                  $next_date= date('d-m-Y', strtotime($today. ' + 90 days'));
                  echo $next_date;
                  

                  【讨论】:

                    【解决方案13】:

                    简单而最好的

                    echo date('Y-m-d H:i:s')."\n";
                    echo "<br>";
                    echo date('Y-m-d H:i:s', mktime(date('H'),date('i'),date('s'), date('m'),date('d')+30,date('Y')))."\n";
                    

                    试试这个

                    【讨论】:

                      【解决方案14】:

                      如果您想要从特定日期起 5 天的日期,您也可以这样添加:

                      您有一个带有这样日期的变量(从输入或数据库中获取或只是硬编码):

                      $today = "2015-06-15"; // Or can put $today = date ("Y-m-d");
                      
                      $fiveDays = date ("Y-m-d", strtotime ($today ."+5 days"));
                      
                      echo $fiveDays; // Will output 2015-06-20
                      

                      【讨论】:

                        【解决方案15】:

                        使用这个 addDate() 函数来添加或减去天、月或年(您还需要辅助函数 reformatDate())

                        /**
                         * $date self explanatory
                         * $diff the difference to add or subtract: e.g. '2 days' or '-1 month'
                         * $format the format for $date
                         **/
                            function addDate($date = '', $diff = '', $format = "d/m/Y") {
                                if (empty($date) || empty($diff))
                                    return false;
                                $formatedDate = reformatDate($date, $format, $to_format = 'Y-m-d H:i:s');
                                $newdate = strtotime($diff, strtotime($formatedDate));
                                return date($format, $newdate);
                            }
                            //Aux function
                            function reformatDate($date, $from_format = 'd/m/Y', $to_format = 'Y-m-d') {
                                $date_aux = date_create_from_format($from_format, $date);
                                return date_format($date_aux,$to_format);
                            }
                        

                        注意:仅适用于 php >=5.3

                        【讨论】:

                          【解决方案16】:

                          使用以下代码。

                          <?php echo date('Y-m-d', strtotime(' + 5 days')); ?>
                          

                          从这里找到参考资料 - How to Add Days to Current Date in PHP

                          【讨论】:

                            【解决方案17】:
                            //add the two day
                            
                            $date = "**2-4-2016**"; //stored into date to variable
                            
                            echo date("d-m-Y",strtotime($date.**' +2 days'**));
                            
                            //print output
                            **4-4-2016**
                            

                            【讨论】:

                              【解决方案18】:
                              //Set time zone
                              date_default_timezone_set("asia/kolkata");
                              $pastdate='2016-07-20';
                              $addYear=1;
                              $addMonth=3;
                              $addWeek=2;
                              $addDays=5;
                              $newdate=date('Y-m-d', strtotime($pastdate.' +'.$addYear.' years +'.$addMonth. ' months +'.$addWeek.' weeks +'.$addDays.' days'));
                              echo $newdate;
                              

                              【讨论】:

                                【解决方案19】:

                                尽管这是一个古老的问题,但这种做法需要很多情况,而且似乎很稳健。你需要有 PHP 5.3.0 或更高版本。

                                $EndDateTime = DateTime::createFromFormat('d/m/Y', "16/07/2017");
                                $EndDateTime->modify('+6 days');
                                echo $EndDateTime->format('d/m/Y');
                                

                                您可以为日期字符串设置任何类型的格式,这会起作用。

                                【讨论】:

                                  猜你喜欢
                                  • 2010-10-08
                                  • 1970-01-01
                                  • 1970-01-01
                                  • 2023-03-06
                                  • 2023-03-09
                                  • 1970-01-01
                                  • 2018-10-20
                                  • 2021-04-26
                                  相关资源
                                  最近更新 更多