php:strtotime(“12/31/2004 +6个月”));没有回到六月的最后一天

时间:2011-11-11 20:43:00

标签: php strtotime

我希望此功能可以返回6/30/2005而不是7/1/2005

print date("m/d/Y", strtotime("12/31/2004 +6 month"));

同样,print date("m/d/Y", strtotime("1/31/2011 +1 month"))会返回03/03/2011,但希望它返回2/28/2011

有没有人知道是否有直接的方式来显示添加月份的最后一天?

4 个答案:

答案 0 :(得分:6)

这个怎么样?

echo date("m/d/Y", strtotime("last day of 12/31/2004 + 6 month")); // 6/30/2005
echo date("m/d/Y", strtotime("last day of 1/31/2011 + 1 month")); // 2/28/2011

Demo

修改:供您参考,以下是documentation for relative times的链接。

答案 1 :(得分:2)

如果没有那个月的日子,那么strtotime会继续到下个月, 你可以退回6个月并检查它是否在开始日期结束

  $date2 = date("Y-m-d", strtotime("{$date} +6 months"));
  $date3 = date("Y-m-d", strtotime("{$date2} -6 months"));
  if($date3 != $date)
  {
     $date2 = date("Y-m-t", strtotime("{$date2} -1 months"));
  }

(或在您的情况下为“m / t / Y”)

答案 2 :(得分:0)

一种简单的方法是实际提前一个月,然后将值设为零。此外,mktime()可能更容易

$mymonth = 2;   // I want the last day of February
echo date('m/d/Y', mktime(0,0,0,$mymonth+1,0,2011));

这应该会在2/28/2011返回。

答案 3 :(得分:0)

strtotime尽可能利用冲突的信息做到最好。说

1/31/2011 +1month

意味着前进到

2/31/2011

但二月只有28天(有时是29天)。 2011年不是闰年,因此“二月三十一日”正常化为“三月三日”。

同样适用于'12 / 31/2004 + 6个月'。这将带你到2005年6月31日。但6月只有30天,所以日期标准化为7月1日。