饼干:每2周一(每2周一次)

时间:2014-08-18 09:58:16

标签: php date cookies

我想要达到的目的是获得下周一的日期,但只有一年的星期一,例如今年(2014年),第一个星期一是1月6日 - > (2周后) - > 1月20日。

我想每两周(每2个星期一)举办一次比赛,我想在第3个星期一的第一分钟设置cookie到期,让客户再次看到比赛弹出窗口。

我试图在网上找到一个解决方案,但没有运气,我不认为这是一种常见的情况

提前致谢

2 个答案:

答案 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');
}

演示:https://ideone.com/Kv74zD

注意:如果您提供的日期早于第一个比赛日期,例如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"));
}
?>