【问题标题】:PHP - Calculate Number of Months between a date and the current datePHP - 计算日期和当前日期之间的月数
【发布时间】:2017-10-17 14:37:02
【问题描述】:

我需要算出这样的日期之间的月数:

$inputDate = '09/08/2016';

以 MM/DD/YYYY 格式输入,以及当前日期,例如:

$today = date("m/d/Y");

我一直在查看 date_diff,但似乎无法在此处获得语法并感谢此处的任何帮助。

【问题讨论】:

  • @PedroLobito 我认为他们在这里已经足够长的时间知道该做什么,并给出了他们的代表分数。也只有9分钟。自从他们发布以来。
  • @Fred-ii- 没注意到代表!处于自动模式...
  • @Fred-ii- 你能看看我的答案的 cmets 吗?为什么我无法正确获取月份?
  • TBH @PedroLobito 我不能说。我认为他们的另一个问题stackoverflow.com/q/43960129 可能与看到"date_expires": "2017-05-27", 有关。
  • 我已经更新了我的答案,谢谢@Fred-ii-!

标签: php date


【解决方案1】:

您可以使用DateTimediff

罢工>

$datetime1 = new DateTime();
$datetime2 = new DateTime('09/08/2016');
$interval = $datetime1->diff($datetime2);
$months = $interval->format('%m months'); # you can also use %a days %h hours %i minutes %s seconds
echo $months;
# 8 months
# optimally you can use:  
# echo $datetime1->diff($datetime2)->y*12;
# or 
# echo $interval->m


基于 cmets 更新:

$datetime1 = new DateTime();
$datetime2 = new DateTime('09/08/2015');
$interval = $datetime1->diff($datetime2);
echo  (($interval->format('%y') * 12) + $interval->format('%m')) . " full months difference";

注意:

DateInterval Object 看起来像:

DateInterval Object
(
    [y] => 3
    [m] => 5
    [d] => 15
    [h] => 0
    [i] => 0
    [s] => 0
    [invert] => 0
    [days] => 1264
)

这就是为什么我们必须乘以 years * 12 的数量并加上 months 以获得月份的差异。奇怪,但这就是它的工作原理......

【讨论】:

  • 我刚刚测试了这个日期为 '05/13/2015' 并且返回 0 个月 - 知道为什么会这样吗?
  • 我不知道为什么它返回 0 个月,不过,您也可以使用 $datetime1->diff($datetime2)->y*12; 获得月份的差异
  • 我注意到如果您将 $datetime2 上的年份更改为 2015 ('$datetime2 = new DateTime('09/08/2015');') 它仍然返回 8 个月。
  • 我还在研究这个,对我来说是个谜!
  • 我想知道这是否考虑了年份,还是仅在 2 个日期在同一年或少于 12 个月时才有效?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-22
  • 1970-01-01
  • 2019-01-24
  • 1970-01-01
  • 2021-05-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多