今天是2015-05-22(了解这个例子)
我必须看一些从数据库中获取值的统计信息。最初我必须做这些比较
对于所有这些控件,我执行此功能,计算所有不同的日期间隔。
function getIntervalDate(){
$today = new DateTime();
$appToday = new DateTime();
$numDay = date("w");
$numYear = (int)date("Y");
switch($numDay){
//monday
case 1 :
$startWeek = $today->format('Y-m-d 00:00:00');
$endWeek = $today->modify('next sunday')->format('Y-m-d 23:59:59');
$startWeek2 = $today->modify('last monday -1 week')->format('Y-m-d 00:00:00');
$endWeek2 = $today->modify('next sunday')->format('Y-m-d 00:00:00');
break;
default:
$startWeek = $today->modify('last monday')->format('Y-m-d 00:00:00');
$endWeek = $today->modify('next sunday')->format('Y-m-d 23:59:59');
$startWeek2 = $today->modify('last monday -1 week')->format('Y-m-d 00:00:00');
$endWeek2 = $today->modify('next sunday')->format('Y-m-d 00:00:00');
break;
}
$startMonth = $today->modify('first day of this month')->format('Y-m-d H:i:s');
$endMonth = $today->modify('last day of this month')->format('Y-m-d 23:59:59');
$today1 = $appToday;
$startMonth2 = $today1->modify('first day of previous month')->format('Y-m-d H:i:s');
$endMonth2 = $today1->modify('last day of this month')->format('Y-m-d 23:59:59');
$today2 = $appToday;
$startYear = $today2->modify('first day of January '.$numYear)->format('Y-m-d 00:00:00');
$endYear = $today2->modify('last day of December '.$numYear)->format('Y-m-d 23:59:59');
$today3 = $appToday;
$startYear2 = $today3->modify('first day of January '.($numYear-1))->format('Y-m-d 00:00:00');
$endYear2 = $today3->modify('last day of December '.($numYear-1))->format('Y-m-d 23:59:59');
return array(
"startWeek" => $startWeek,
"endWeek" => $endWeek,
"startWeek2" => $startWeek2,
"endWeek2" => $endWeek2,
"startMonth" => $startMonth,
"endMonth" => $endMonth,
"startMonth2" => $startMonth2,
"endMonth2" => $endMonth2,
"startYear" => $startYear,
"endYear" => $endYear,
"startYear2" => $startYear2,
"endYear2" => $endYear2
);
}
一切都很完美。但现在我必须改变各种比较。我必须始终比较当前的周/月/年时间间隔,但是与上一年的周/月/年相比(在一年的情况下没有问题,代码保持不变)
我做了一些测试,但我失败了。我主要使用->modify('-1 year')
,但效果并不理想。
答案 0 :(得分:0)
根据您上面的讨论,这里是您的问题的解决方案:
$startWeek->modify("-1 year")->modify('monday')->format('Y-m-d H:i:s');
这是测试。
$today = DateTime::createFromFormat('Y-m-d H:i:s', '2015-05-18 00:00:00');
$startWeekPrevYear=$today->modify('-1 year')->modify('monday');
echo $startWeekPrevYear->format('Y-m-d H:i:s');//outputs 2014-05-19 00:00:00