2015-03-29 5 views
0

У меня есть этот календарь с выделенной текущей датой. Я хотел бы выделить предыдущую неделю, сегодня 30/03/2015, поэтому выделенные даты будут от 23 до 29. Скрипт отлично работает, если я выбираю даты из первого столбца (Mon), но не удается, когда я нажимаю на скажем, 26, я получаю даты от 19 до 25 вместо 16 к 22. Любые мысли?Выделите предыдущую неделю по календарю

if(isset($_GET['day'])) { 

    for ($i = -7; $i < 0; $i++) { 
    print date('Y-m-d', strtotime(str_replace('-','/', $_GET['day'])) + $i * 86400) . "<br />"; 
    } 
} 

А вот в календаре Calendar

ответ

1

Я бы выбрал первый понедельник недели, после которого вы вышли даты оттуда. В настоящее время ваш скрипт не учитывает, где в течение недели вы просто выходите на предыдущие 7 дней.

if(!empty($_GET['day'])){ 
    $int = strtotime($_GET['day']); 
    $firstmonday = strtotime('monday last week', $int); 
    for($i = 0; $i < 7; $i++) { 
     echo date('Y-m-d', $firstmonday + (86400 * $i)) . "<br />"; 
    } 
} 

С воскресенья - это особый случай, позволяющий проверить, является ли запрашиваемая дата одной.

if(!empty($_GET['day'])){ 
    $int = strtotime($_GET['day']); 
    $interval = (date('N', $int) == 7) ? '-2 week' : '-1 week'; 
    $firstmonday = strtotime($interval, $int); 
    for($i = 1; $i < 8; $i++) { 
     echo date('Y-m-d', $firstmonday + (86400 * $i)) . "<br />"; 
    } 
} 
+0

Все работает, за исключением случаев, когда я выбираю даты с воскресенья. Если щелкнуть 22, цифры, которые я получаю, составляют от 16 до 22 вместо 9-15, почему? – phcm

+0

Предыдущий понедельник с 22-го числа был 17-м, так что 16-22 - это то, что я ожидал. Вы хотите 2 недели назад, если это воскресенье, хотя это звучит, верно? – chris85

+0

Да, так что я должен быть strtotime («понедельник последние 2 недели», $ int) ;? – phcm

1
if(isset($_GET['day'])) { 
    $shift = (intval(date('w', strtotime($_GET['day']))) - 1)%7; 
    // Numeric representation of the day of the week, 0 for sunday -> need to sub 1 day 
    for ($i = -7; $i < 0; $i++) { 
    print date('Y-m-d', strtotime(str_replace('-','/', $_GET['day'])) + ($i - $shift) * 86400) . "<br />"; 
    } 
} 

Он должен работать в вашем случае. Основная идея - получить числовое представление дня недели (sunday => 0) и вычесть их из текущей даты.

Смежные вопросы