我希望此功能可以返回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
。
有没有人知道是否有直接的方式来显示添加月份的最后一天?
答案 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
修改:供您参考,以下是documentation for relative times的链接。
答案 1 :(得分:2)
$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日。