在日期中增加天数


124

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

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

但是我没有得到正确的日期,而是得到了: 2592000

请提出建议。




4
使用标签名称进行搜索,并在标签名称前后加上方括号,例如[php] [date] add在搜索框中。您会找到许多类似问题的答案。
Mikel

Answers:


247

这应该是

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

strtotime

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

date

返回一个字符串,该字符串使用给定的整数时间戳或给定的时间字符串(如果未提供时间戳)根据给定的格式字符串格式化。

参见手册页

及其功能签名。


我认为这会在穿越夏时制和其他有趣的日历项目时引起问题。它的排序取决于上下文。您需要考虑是否要寻找30个24小时制,这在经过夏时制时可能会导致您下午11:00。
JJ Rohrer 2014年

1
@JJRohrer不,不会。strtotime将考虑配置的时区的任何夏令时。仅当您执行以下操作时,DST才是问题:stackoverflow.com/questions/4066035
Gordon

点了。我遇到了这个问题,试图解决一些与您引用的问题更接近的问题。我希望上面的评论能使其他人认真考虑他们的日期计算-它很容易忘记所有例外。
JJ Rohrer 2014年

64

这个可能很好

function addDayswithdate($date,$days){

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

}

4
如果您需要快速解决方案并且不想创建函数,也可以将上述解决方案压缩为一行。回声日期(“ Ymd”,strtotime(“ + 12days”,strtotime(20130101)))
Mayank Jaiswal

46
$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是否可以解决其他时间问题,例如leap秒,但是根据您的需要,如果要处理日历日,最好使用DateTime和StrToTime。
JJ Rohrer 2014年

@chx此解决方案还更仔细地允许有日期;例如,新的DateTime('2016-12-09 10:35:58'); 是来自数据库时间戳...
mshaffer

10
$today=date('d-m-Y');
$next_date= date('d-m-Y', strtotime($today. ' + 90 days'));
echo $next_date;

10

如果您希望将日期从特定日期算起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

7

请记住,由于仅采用夏令时,时钟的变化可能会在仅计算日期时给您带来一些问题。

这是一个小的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;
}



6

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


6

我知道这是一个老问题,但是对于PHP <5.3,您可以尝试以下方法:

$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');


5
$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];

4

您可以尝试一下。

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

3

简单而最佳

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";

试试这个



2

使用此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



1
//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;

1

即使这是一个古老的问题,但这种方法仍会在很多情况下使用,并且似乎很可靠。您需要PHP 5.3.0或更高版本。

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.