【问题标题】:PHP strtotime using m-d-Y formatPHP strtotime 使用 m-d-Y 格式
【发布时间】:2013-11-05 22:28:00
【问题描述】:

我的日期格式为 (m-d-Y) 月-日-年。我正在尝试减去日期。我不能使用 strtotime() 因为它不能以那种格式工作。如何减去 m-d-Y 格式的日期?

<?php
  date_default_timezone_set('America/Chicago');

  $olddate = "11-04-2013"; 
  $today = date("m-d-Y");

  $days = $olddate - $today;

  echo $days;

?> 

如果我使用 strtotime,我的结果(截至 2013 年 11 月 5 日)是“30”。但我不能只除以 30。如果我将 olddate 更改为“10-04-2013”​​,那么结果也是“30”。

【问题讨论】:

    标签: php date strtotime


    【解决方案1】:

    您应该使用 php 的 DateTime 类(createFromFormat 的 php 5.3+):

    $olddate = DateTime::createFromFormat('m-d-Y', '11-04-2013');    // for example, see manual for formats
    $today = new DateTime();
    
    $diff = $today->diff($olddate);
    $diff_string = $diff->format('%a days');
    

    【讨论】:

    • 如果我回显 $diff,我收到一个错误,即 DateInterval 无法转换为字符串。如何回显结果?
    • @bagofmilk 查看format上的手册:php.net/manual/en/dateinterval.format.php,查看我的编辑
    • 我看到你编辑了你的答案。这是一个很好的开始,但不幸的是,如果将 olddate 更改为 10-04-2013,这将不起作用。结果还是 1 天。
    • @bagofmilk 没错,因为月份也增加了。如果你想要总天数,你需要a而不是d,我会编辑。
    【解决方案2】:

    您可以使用 DateTime::createFromFormat 获取时间戳,然后获取差异。

    http://www.php.net/manual/en/datetime.createfromformat.php

    【讨论】:

      【解决方案3】:

      DateTime 类,或者您使用 str_replace() - 与 / 它应该与 strtotime() 一起工作。这是常见的美国日期格式顺序,但分隔符不是。

      【讨论】:

        【解决方案4】:

        如果要比较两个日期之间的差异: 通过

        将字符串转换为日期格式
        new DateTime("11-04-2013") or new DateTime(date("m-d-Y"))
        
        $diffe = new DateTime("11-04-2013")->diff(new DateTime(date("m-d-Y")));
        echo $diffe->format('%R%a days');    
        

        【讨论】:

          【解决方案5】:

          您可以为此使用DateTime 类:

          $oldDate = \DateTime::createFromFormat('m-d-Y', "11-04-2013");
          $today = new \DateTime('today');
          
          $difference = $today->diff($oldDate);
          echo $difference->format('%a');
          

          【讨论】:

            【解决方案6】:

            来自documentation

            m/d/y 或 d-m-y 格式的日期通过查看各个组件之间的分隔符来消除歧义:如果分隔符是斜线 (/),则假定为美式 m/d/y;而如果分隔符是破折号 (-) 或点 (.),则假定为欧洲 d-m-y 格式。

            只需替换字符。您可以通过以下程序方式获取日期后的天数:

            $date = '11-04-2013';
            $time = strtotime(str_replace('-','/',$date));
            $now = strtotime(date('Y-m-d'));
            $diff = $now - $time;
            $days = $diff / (24 * 60 * 60);
            echo $days;
            

            【讨论】:

              【解决方案7】:

              我想你可以看看这个:http://www.php.net/manual/en/datetime.diff.php

              示例 #1 DateTime::diff() 示例

              面向对象的风格

              <?php
              $datetime1 = new DateTime('2009-10-11');
              $datetime2 = new DateTime('2009-10-13');
              $interval = $datetime1->diff($datetime2);
              echo $interval->format('%R%a days');
              ?>
              

              程序风格

              <?php
              $datetime1 = date_create('2009-10-11');
              $datetime2 = date_create('2009-10-13');
              $interval = date_diff($datetime1, $datetime2);
              echo $interval->format('%R%a days');
              ?>
              

              上面的例子会输出:

              +2 days
              

              【讨论】:

              • 不幸的是,我坚持使用月-日-年格式,否则我会使用 strototime()。
              • 如果把“-”改成“/”,或者做了explode('-', $date)怎么办?
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2021-03-09
              • 1970-01-01
              • 2018-05-25
              • 1970-01-01
              • 2017-11-02
              • 1970-01-01
              • 2023-03-08
              相关资源
              最近更新 更多