Функция для вывода количества недель с помощью функции phptime

#php

#php

Вопрос:

28 дней составляют четыре недели, верно? Ну, я пытаюсь написать функцию, которая в основном возвращает что-то вроде этого week1, week2, week3, week4..Неделя 1 — это, по сути, первые 7 дней, начиная с сегодняшнего дня. Но это все, на что я был способен.

 function week() {
    $currentdate = time();
    $numberofdays = 28;
    for ($i=0; $i<$numberofdays; $i  ) {
    }
}
  

Комментарии:

1. если (i%7==0) повторить «неделя: «.$j ;

2. @Байрон Уитлок, при этом не используется текущая дата?

3. Пожалуйста, покажите, какой вывод вы ожидаете именно от сегодняшней даты.

4. Вы пытаетесь вернуть текущую дату недели?

Ответ №1:

Итак, вы пытаетесь сохранить все дни, например, для календаря, или просто сгенерировать день, с которого начинается каждая неделя?

Если вы пытаетесь сохранить все дни, попробуйте это:

 function week($days = 28) 
{
    //Note, I added the number of days to the function arguments, so that it can be variable without having to change the code
    if(!is_int($days) || $days <= 0)
    {
        return false;
    }

    $start = strtotime("midnight tonight");
    $currentweek = 1;
    $weeks = array();
    for ($i = 1; $i <= $days; $i  ) 
    {
        $weeks[$currentweek][] = $start   ($i * 86400); 

        if(!(i % 7))
        {
            $currentweek  ;
        }
    }

    return $weeks;
}
  

Это должно вернуть массив временных меток, сгруппированных по неделям, начиная с полуночи в день, в течение $days которого он выполняется в течение нескольких дней. Если вам нужны даты в правильном формате, вместо сохранения метки времени в массиве сохраните результат функции date() в метке времени.

Ответ №2:

смотрите документацию здесь:

http://www.php.net/manual/en/function.time.php

Я думаю, вы имеете в виду что-то вроде:

 <?php
$nextWeek = time()   (7 * 24 * 60 * 60);
                   // 7 days; 24 hours; 60 mins; 60secs
echo 'Now:       '. date('Y-m-d') ."n";
echo 'Next Week: '. date('Y-m-d', $nextWeek) ."n";
// or using strtotime():
echo 'Next Week: '. date('Y-m-d', strtotime(' 1 week')) ."n";
?>
  

Приведенный выше пример выведет что-то похожее на:

Сейчас: 2005-03-30 На следующей неделе: 2005-04-06 На следующей неделе: 2005-04-06

Комментарии:

1. Если это произойдет примерно во время переключения на летнее время, это приведет к сбою. Как всегда при использовании временных меток для вычисления даты.

Ответ №3:

     /**
 * Returns the amount of weeks into the month a date is
 * @param $date a YYYY-MM-DD formatted date
 * @param $rollover The day on which the week rolls over
 */
function getWeeks($date, $rollover)
{
    $cut = substr($date, 0, 8);
    $daylen = 86400;

    $timestamp = strtotime($date);
    $first = strtotime($cut . "00");
    $elapsed = ($timestamp - $first) / $daylen;

    $i = 1;
    $weeks = 1;

    for($i; $i<=$elapsed; $i  )
    {
        $dayfind = $cut . (strlen($i) < 2 ? '0' . $i : $i);
        $daytimestamp = strtotime($dayfind);

        $day = strtolower(date("l", $daytimestamp));

        if($day == strtolower($rollover))  $weeks   ;
    }

    return $weeks;
}


$dateNow = date("Y-m-d");
echo getWeeks($dateNow, "monday");