希望我的想法是正确的,这个解决方案可能很长,但看起来很安全:
$numOfDays = date('t', $todayStamp);
$base = strtotime('+'.$numOfDays.' days', strtotime(date('Y-m-01', $todayStamp)));
$day15 = date('Y-m-15', $base);
$day30 = date('Y-m-'.min(date('t', $base), 30), $base);
where $todayStamp
一般是值time()
,但出于调试目的,它可以是strtotime()
任意日期。例如,我们以下一个闰年的“困难”情况为例:
$today = '2016-01-30';
$todayStamp = strtotime($today);
$numOfDays = date('t', $todayStamp);
$base = strtotime('+'.$numOfDays.' days', strtotime(date('Y-m-01', $todayStamp)));
$day15 = date('Y-m-15', $base);
$day30 = date('Y-m-'.min(date('t', $base), 30), $base);
var_dump($day15);
var_dump($day30);
输出是
string(10) "2016-02-15"
string(10) "2016-02-29"
2016-02-29 的输出将为
string(10) "2016-03-15"
string(10) "2016-03-30"