58

如何在 PHP 中将特定天数添加到当前日期?

我已经得到了当前日期:

$today = date('y:m:d');

只需添加 x 天数即可

4

11 回答 11

124

php支持 c 风格的日期函数。strtotime您可以通过该功能添加或减去带有英语风格短语的日期时段。例子...

$Today=date('y:m:d');

// add 3 days to date
$NewDate=Date('y:m:d', strtotime('+3 days'));

// subtract 3 days from date
$NewDate=Date('y:m:d', strtotime('-3 days'));

// PHP returns last sunday's date
$NewDate=Date('y:m:d', strtotime('Last Sunday'));

// One week from last sunday
$NewDate=Date('y:m:d', strtotime('+7 days Last Sunday'));

或者

<select id="date_list" class="form-control" style="width:100%;">
<?php
$max_dates = 15;
$countDates = 0;
while ($countDates < $max_dates) {
    $NewDate=Date('F d, Y', strtotime("+".$countDates." days"));
    echo "<option>" . $NewDate . "</option>";
    $countDates += 1;
}
?>

于 2008-11-10T07:11:23.643 回答
25

一天是86400秒。

$tomorrow = date('y:m:d', time() + 86400);
于 2008-11-10T07:03:30.553 回答
17

添加 x 号的最简单方法。天..

echo date('Y-m-d',strtotime('+1 day'));    //+1 day from today

或从指定日期...

echo date('Y-m-d',strtotime('+1 day', strtotime('2007-02-28')));
于 2015-01-18T15:24:39.990 回答
8

使用 php 5.3

    $date = new DateTime();
    $interval = new DateInterval('P1D');
    echo $date->format('Y-m-d') , PHP_EOL;
    $date->add($interval);
    echo $date->format('Y-m-d'), PHP_EOL;
    $date->add($interval);
    echo $date->format('Y-m-d'), PHP_EOL;

将输出

2012-12-24

2012-12-25

2012-12-26

于 2012-12-25T03:28:18.737 回答
7

date_add()功能应该做你想做的事。此外,请查看该DateTime对象的文档(非官方的,但官方的文档有点稀疏),它比 PHP 中的过程函数好用得多。

于 2008-11-10T07:03:59.757 回答
2

如果您在多个地方需要此代码,那么我建议您添加一个简短的函数以使您的代码更简单且更易于测试。

function add_days( $days, $from_date = null ) {
    if ( is_numeric( $from_date ) ) { 
        $new_date = $from_date; 
    } else { 
        $new_date = time();
    }

    // Timestamp is the number of seconds since an event in the past
    // To increate the value by one day we have to add 86400 seconds to the value
    // 86400 = 24h * 60m * 60s
    $new_date += $days * 86400;

    return $new_date;
}

然后你可以像这样在任何地方使用它:

$today       = add_days( 0 );
$tomorrow    = add_days( 1 );
$yesterday   = add_days( -1 );
$in_36_hours = add_days( 1.5 );

$first_reminder  = add_days( 10 );
$second_reminder = add_days( 5, $first_reminder );
$last_reminder   = add_days( 3, $second_reminder );
于 2015-04-24T14:50:59.620 回答
2
$NewDate=Date('Y-m-d', strtotime('+365 days'));

回声 $NewDate; //2020-05-21

于 2019-05-22T05:38:50.863 回答
0

向选择元素添加 15 天(使用“生死存亡”建议)

<select id="date_list" class="form-control" style="width:100%;">
<?php
$max_dates = 15;
$countDates = 0;
while ($countDates < $max_dates) {
    $NewDate=Date('F d, Y', strtotime("+".$countDates." days"));
    echo "<option>" . $NewDate . "</option>";
    $countDates += 1;
}
?>

于 2018-04-20T19:27:32.643 回答
0

$NewTime = mktime(date('G'), date('i'), date('s'), date('n'), date('j') + $DaysToAdd, date('Y'));

来自mktime 文档

mktime() 对于进行日期算术和验证很有用,因为它会自动为超出范围的输入计算正确的值。

这种方法的优点是您可以在易于阅读的代码行中添加或减去任何时间间隔(小时、分钟、秒、天、月或年)。

请注意,在性能方面存在折衷,因为由于对 date() 函数的所有调用,此代码比 strtotime("+1 day") 慢约 2.5 倍。如果您处于循环中,请考虑重新使用这些值。

于 2019-06-11T14:51:39.797 回答
0

您还可以使用面向对象编程 (OOP) 而不是过程编程:

$fiveDays = new DateInterval('P5D');
$today = new DateTime();
$fiveDaysAgo = $today->sub(fiveDays); // or ->add(fiveDays); to add 5 days

或者只用一行代码:

$fiveDaysAgo = (new DateTime())->sub(new DateInterval('P5D'));
于 2020-11-29T09:23:09.760 回答
-2
<?php
$dt = new DateTime;
if(isset($_GET['year']) && isset($_GET['week'])) {
    $dt->setISODate($_GET['year'], $_GET['week']);
} else {
    $dt->setISODate($dt->format('o'), $dt->format('W'));
}
$year = $dt->format('o');
$week = $dt->format('W');
?>

<a href="<?php echo $_SERVER['PHP_SELF'].'?week='.($week-1).'&year='.$year; ?>">Pre Week</a> 
<a href="<?php echo $_SERVER['PHP_SELF'].'?week='.($week+1).'&year='.$year; ?>">Next Week</a>
<table width="100%" style="height: 75px; border: 1px solid #00A2FF;">
<tr>
<td style="display: table-cell;
    vertical-align: middle;
    cursor: pointer;
    width: 75px;
    height: 75px;
    border: 4px solid #00A2FF;
    border-radius: 50%;">Employee</td>
<?php
do {
    echo "<td>" . $dt->format('M') . "<br>" . $dt->format('d M Y') . "</td>\n";
    $dt->modify('+1 day');
} while ($week == $dt->format('W'));
?>
</tr>
</table>
于 2016-12-01T06:18:36.570 回答