Функция PHP, чтобы получить даты последних 7 недель - PullRequest
0 голосов
/ 24 сентября 2010

Я пытаюсь создать функцию php, которая бы возвращала массив с начальной и конечной датами последних n недель. это будет включать текущую неделю. Это будет выглядеть примерно так:

function lastnweeks(n)
{
//the code. I am not asking for the code itself but ideas on how to accomplish this
return $array; 
}
$lastnweeks =lastnweeks(2);
print_r($lastnweeks);

это напечатало бы:

Array ( 
    [0] =>  Array ( 
        [0] => 2010/09/20 
        [1] => 2010/09/26
   )[1] => Array ( 
        [0] => 2010/09/13 
        [1] => 2010/09/19
))

Ответы [ 3 ]

2 голосов
/ 24 сентября 2010

Я бы не стал использовать абсолютное количество секунд из-за перехода на летнее и летнее время. Вы можете позволить функции PHP strtotime() позаботиться об этом, используя относительные даты. На каждой итерации цикла вы можете просто сказать функции найти «Последний понедельник», а затем использовать этот результат в качестве отправной точки для следующей итерации.

код:

$past_weeks = 7;
$relative_time = time();
$weeks = array();

for($week_count=0;$week_count<$past_weeks;$week_count++) {
    $monday = strtotime("last Monday", $relative_time);
    $sunday = strtotime("Sunday", $monday);
    $weeks[] = array(
        date("Y-m-d", $monday),
        date("Y-m-d", $sunday),
    );
    $relative_time = $monday;
}

var_dump($weeks);

Выход:

array
  0 => 
    array
      0 => string '2010-09-20' (length=10)
      1 => string '2010-09-26' (length=10)
  1 => 
    array
      0 => string '2010-09-13' (length=10)
      1 => string '2010-09-19' (length=10)
  2 => 
    array
      0 => string '2010-09-06' (length=10)
      1 => string '2010-09-12' (length=10)
  3 => 
    array
      0 => string '2010-08-30' (length=10)
      1 => string '2010-09-05' (length=10)
  4 => 
    array
      0 => string '2010-08-23' (length=10)
      1 => string '2010-08-29' (length=10)
  5 => 
    array
      0 => string '2010-08-16' (length=10)
      1 => string '2010-08-22' (length=10)
  6 => 
    array
      0 => string '2010-08-09' (length=10)
      1 => string '2010-08-15' (length=10)
0 голосов
/ 24 сентября 2010

Выберите

$last_week = strtotime('last Week');
echo "Last Week ".date("Y/m/d", $last_week)."<br />\n";

или

$last_week = mktime(0,0,0,date("m"),date("d")-7,date("Y"));
echo "Last Week ".date("Y/m/d", $last_week)."<br />\n";
0 голосов
/ 24 сентября 2010

Используйте strtotime, чтобы получить понедельник, а затем вычтите количество секунд для каждой недели:

function lastnweeks($n) {
    $time = strtotime('Monday 00:00:00+0000');
    $arr = array();
    while ($n-- > 0) {
        $arr[] = array_reverse(array(
            date('Y/m/d', $time-=86400),   // sunday
            date('Y/m/d', $time-=6*86400)  // monday
        ));
    }
    return $arr;
}

array_reverse используется для реверса массива, когда вычисления идут назад.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...