【问题标题】:Simplest way to increment a date in PHP?在 PHP 中增加日期的最简单方法?
【发布时间】:2010-10-14 05:09:23
【问题描述】:

假设我有一个字符串,"2007-02-28",我可以写什么最简单的代码来把它变成"2007-03-01"?现在我只是使用strtotime(),然后添加24*60*60,然后使用date(),但只是想知道是否有更清洁、更简单或更聪明的方法。

【问题讨论】:

    标签: php datetime date strtotime date-manipulation


    【解决方案1】:

    使用strtotime() 和日期格式

    echo date('Y-m-d', strtotime('2007-02-28' . ' +1 day'));
    

    【讨论】:

      【解决方案2】:
      $your_date = strtotime("1month", strtotime(date("Y-m-d")));
       $new_date = date("Y-m-d", $your_date++);
      

      【讨论】:

      • /("1month")= 将按月递增。 //("1day")= 将按天递增。 //(date("Y-m-d"))=开始在当前日期增加日期。
      • 您应该编辑您的答案以包含代码的解释,而不是在评论中包含解释。
      【解决方案3】:

      你好,如果你是法国人,你可以在下面试试这个

      $date = date('l j F Y');
      #increment the date
      $date2 = date('l j F Y', strtotime("+7 day"));
      

      要翻译成法语,您可以使用 setlocale() 函数或以下函数:

      function fr_date($date){
      
          $date = explode(' ', $date);
      
          $date = str_replace('Monday','Lundi',$date);
          $date = str_replace('Tuesday','Mardi',$date);
          $date = str_replace('Wednesday','Mercredi',$date);
          $date = str_replace('Thursday','Jeudi',$date);
          $date = str_replace('Friday','Vendredi',$date);
          $date = str_replace('Saturday','Samedi',$date);
          $date = str_replace('Sunday','Dimanche',$date);
      
          $date = str_replace('January','Janvier',$date);
          $date = str_replace('February','Février',$date);
          $date = str_replace('March','Mars',$date);
          $date = str_replace('April','Avril',$date);
          $date = str_replace('May','Mai',$date);
          $date = str_replace('June','Juin',$date);
          $date = str_replace('July','Juillet',$date);
          $date = str_replace('August','Août',$date);
          $date = str_replace('September','Septembre',$date);
          $date = str_replace('October','Octobre',$date);
          $date = str_replace('November','Novembre',$date);
          $date = str_replace('December','Décembre',$date);
      
          $date = implode(' ',$date);
          return $date;
      
      }
      

      【讨论】:

        【解决方案4】:
         $early_start_date = date2sql($_POST['early_leave_date']);
        
        
                $date = new DateTime($early_start_date);
                $date->modify('+1 day');
        
        
                $date_a = new DateTime($early_start_date . ' ' . $_POST['start_hr'] . ':' . $_POST['start_mm']);
                $date_b = new DateTime($date->format('Y-m-d') . ' ' . $_POST['end_hr'] . ':' . $_POST['end_mm']);
        
                $interval = date_diff($date_a, $date_b);
        

        【讨论】:

          【解决方案5】:

          最简单的方法...

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

          或从指定日期...

          echo date('Y-m-d',strtotime("+1 day", strtotime('2007-02-28')));
          

          【讨论】:

            【解决方案6】:

            另一种方法是使用函数 mktime()。很实用的功能...

            $date = "2007-02-28";
            list($y,$m,$d)=explode('-',$date);
            $date2 = Date("Y-m-d", mktime(0,0,0,$m,$d+1,$y));
            

            但我认为strtotime() 在这种情况下会更好......

            【讨论】:

            • 很好,我没有意识到 mktime() 会在你过去时像那样增加月份
            【解决方案7】:

            你可以直接在 strtotime 中进行加法,例如

             $today="2007-02-28";
             $nextday=strftime("%Y-%m-%d", strtotime("$today +1 day"));
            

            【讨论】:

            • 哦,整洁。不知道那个。这几乎就像旧的 Date::Manip。
            【解决方案8】:

            一种简洁的方式使用strtotime()

            $date = strtotime("+1 day", strtotime("2007-02-28"));
            echo date("Y-m-d", $date);
            

            会给你2007-03-01

            【讨论】:

              【解决方案9】:

              添加86400更干净更简单。:)

              高科技的做法是:

              $date = new DateTime($input_date);
              $date->modify('+1 day');
              echo $date->format('Y-m-d');
              

              但是,如果您在日期进行一系列转换,而不是仅仅找到明天,那么这真的是微不足道的。

              【讨论】:

              • 愚蠢的 CentOS 只有 PHP 5.1,而 DateTime 是在 5.2 中引入的。我想我终于要升级到非官方的centos php包了。
              • 呃,没有。仅添加 86400 是错误的简单性。
              • 你能解释一下你的意思吗?
              • @chaos:如果您的最小工作时间单位是一天,那么您通常可以添加或减去 86400 的单位。如果它更小,您需要注意夏令时和时区。在这种情况下,请使用内置函数。他们会比你更经常地做对。
              • 并非所有的日子都是 86400 秒长(闰秒)。
              猜你喜欢
              • 1970-01-01
              • 2016-02-05
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-07-06
              • 2017-03-06
              • 1970-01-01
              相关资源
              最近更新 更多