我想要达到的目的是获得下周一的日期,但只有一年的星期一,例如今年(2014年),第一个星期一是1月6日 - > (2周后) - > 1月20日。
我想每两周(每2个星期一)举办一次比赛,我想在第3个星期一的第一分钟设置cookie到期,让客户再次看到比赛弹出窗口。
我试图在网上找到一个解决方案,但没有运气,我不认为这是一种常见的情况
提前致谢
答案 0 :(得分:1)
考虑到第一场比赛是在本年度的第一个星期一开始(即您提供给该职能的那一年),我相信以下内容应该正常运作:
function get_next_contest_date($current_date) {
$current_date_obj = new DateTime($current_date);
$year = $current_date_obj->format("Y");
$first_day_of_year = date('D', strtotime("$year-01-01"));
$week = $current_date_obj->format("W");
$contest_week = $week;
if($first_day_of_year !== 'Mon') {
$contest_week--;
}
$end_date_obj = new DateTime();
if($contest_week & 1) {
$end_date_obj->setISODate($year, $week + 2);
} else {
$end_date_obj->setISODate($year, $week + 1);
}
return $end_date_obj->format('Y-m-d');
}
注意:如果您提供的日期早于第一个比赛日期,例如2014-01-03
,则会返回第一个比赛的日期,即2014-01-06
;
答案 1 :(得分:0)
如果我理解你的问题,你需要计算某一年的第一个星期一,然后计算那一年的每个星期一的日期。如果是这种情况,这里有一段简短的代码片段:
<?
$year=2014;
$d="01-01-" . $year;
$i=date("w", strtotime($d));
if($i==0) { $FirstMondayOfTheYear="02-01-" . $year; }
if($i==1) { $FirstMondayOfTheYear="01-01-" . $year; }
if($i>=2) { $j=9-$i; $FirstMondayOfTheYear="0" . $j . "-01-" . $year; }
$d=$FirstMondayOfTheYear;
while( date("Y", strtotime($d))==$year ) {
print date("D d-m-Y", strtotime($d)) . "\n";
$d=date('d-m-Y', strtotime($d . "+14 days"));
}
?>