【问题标题】:Increase days to php current Date()将天数增加到 php 当前 Date()
【发布时间】:2010-09-21 14:12:48
【问题描述】:

如何在 PHP 中为当前日期添加一定天数?

我已经得到了当前日期:

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

只需要加上x天就可以了

【问题讨论】:

    标签: php date days


    【解决方案1】:

    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;
    }
    ?>
    

    【讨论】:

    • 使用 strtotime() 函数非常昂贵,如果您只想增加几天时间,这将是巨大的矫枉过正。
    • 听起来像是过早的优化。如果它不是在时间关键的代码段中,我们没有理由认为它是,与程序员的时间成本相比,燃烧几毫秒是微不足道的。
    【解决方案2】:

    一天是 86400 秒。

    $tomorrow = date('y:m:d', time() + 86400);
    

    【讨论】:

    • 虽然,出于可读性原因,您不应该在任何地方按原样使用整数。在某处定义一个 const 或使用 60 * 60 * 24 以便清楚数字代表什么。
    • 我经常使用 86400,以至于现在对我来说就像一分钟有 60 秒一样明显 :)。如果我做了很多时间函数,那么是的,我经常将它声明为常量。
    • @nickf 当你是唯一一个维护你的代码的人时,这没关系,但通常还有其他人也在查看它。如果不是现在,那么也许将来会有……
    【解决方案3】:

    添加 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')));
    

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

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

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

          【讨论】:

            【解决方案7】:
            $NewDate=Date('Y-m-d', strtotime('+365 days'));
            

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

            【讨论】:

              【解决方案8】:

              将 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;
              }
              ?>
              

              【讨论】:

                【解决方案9】:

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

                来自mktime documentation

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

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

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

                【讨论】:

                  【解决方案10】:

                  您还可以使用面向对象编程 (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'));
                  

                  【讨论】:

                    【解决方案11】:
                    <?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>
                    

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 1970-01-01
                      • 2011-09-27
                      • 2014-05-25
                      • 1970-01-01
                      • 1970-01-01
                      • 2017-01-13
                      • 1970-01-01
                      • 2023-03-04
                      相关资源
                      最近更新 更多