PHP date_diff函数坏了吗?

时间:2017-02-19 20:03:46

标签: php datediff

考虑这两个日期2017/4 / 14,2017 / 6/3

在php中使用date_diff给我这个

  object(DateInterval)[6]
  public 'y' => int 0
  public 'm' => int 1
  public 'd' => int 20
  public 'h' => int 0
  public 'i' => int 0
  public 's' => int 0
  public 'weekday' => int 0
  public 'weekday_behavior' => int 0
  public 'first_last_day_of' => int 0
  public 'invert' => int 0
  public 'days' => int 50
  public 'special_type' => int 0
  public 'special_amount' => int 0
  public 'have_weekday_relative' => int 0
  public 'have_special_relative' => int 0

我的任务是创建此函数的复制(作为赋值)。但是当我通过算法运行这些日期时,我得到了

object(stdClass)[4]
  public 'years' => int 0
  public 'months' => int 1
  public 'days' => int 19
  public 'total_days' => int 50
  public 'invert' => int 0 

当我手动(手动)计算天数时,我仍然认为这是额外的19天。我不是在寻找分配解决方案。但也许某些算法或者date_diff函数有一些我不知道的错误?

对于200多个测试用例,我的算法可以正常工作,对于其他7个测试用例,它没有,并且它在我的解决方案和php解决方案之间始终存在差异。

1 个答案:

答案 0 :(得分:1)

请记住,一个月不是一个固定的天数,所以它将依赖于你吞噬那个" 1个月。"

如果您从2017/4/14开始并且需要整整几个月才能获得:

  • 4/14 - > 5月14日:1个月(30天)
  • 5/14 - > 6/3:20天

如果你从2017/6/3开始并向后工作,你会得到:

  • 6/3 - > 5/3:1个月(31天)
  • 5/3 - > 4/14:19天

所以它依赖于你正在使用的方法。

简而言之date_diff在这里没有被打破,可以说你的算法也不是 - 日期只是一些时髦的事情。