【问题标题】:get years between 2 dates?得到两个日期之间的年份?
【发布时间】:2009-12-12 09:47:56
【问题描述】:

我有 2 个日期,例如:

2009-11-11 2002-11-11

我想得到他们之间的“7”年。我该怎么做?月份和日期将始终相同,我不想使用 -。有没有合适的方法?

【问题讨论】:

  • 如果月份和日期总是相同的,那你为什么不从另一个中减去一年呢?
  • “我不想使用 -”:为什么不呢?
  • 是的,有合适的方法,但你已经排除了。

标签: php date


【解决方案1】:

我强烈建议使用 Sarfraz Ahmed 建议的功能。

如果你想手动完成(并且没有新的 DateTime 类),它可能看起来像这样:

<?php

$date1 = strtotime("2009-11-11");
$date2 = strtotime("2002-11-11");

$time_difference = $date1 - $date2;

$seconds_per_year = 60*60*24*365;
$years = round($time_difference / $seconds_per_year);

print_r($years);

【讨论】:

    【解决方案2】:

    使用 php 5.3+ 你可以使用DateTime::diff()

    $a = new DateTime('2009-11-11');
    foreach( array('2002-11-11', '2002-11-12', '2005-05-06') as $dt) {
      $b = new DateTime($dt);
      echo $dt, ' | ', $a->diff($b)->format('%y'), ' | ', $a->diff($b)->format('%y %m %d'), "\n";
    }
    

    打印

    2002-11-11 | 7 | 7 0 0
    2002-11-12 | 6 | 6 11 29
    2005-05-06 | 4 | 4 6 5
    

    【讨论】:

      【解决方案3】:
      $a = new DateTime('2009-11-11');
      $b = new DateTime('2002-11-11');
      $years = $b->diff($a)->y;
      var_dump($years); // int(7)
      

      希望这会有所帮助。

      【讨论】:

        【解决方案4】:

        如果日期确实总是相同,您可以使用:

        $date1 = "2009-11-11";
        $date2 = "2002-11-11";
        
        $years = substr($date1,0,4) - substr($date2,0,4); // 7
        

        或者,将它们转换为时间戳 (mktime),减去然后再转换回来(使用 date() 上的参数)

        【讨论】:

          【解决方案5】:

          假设日期是 UNIX 时间戳(Unix 纪元),“可能”最快的方法是:

          intval(($time2 - $time1) / 31556926);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-02-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多