Как бы я соединил функцию PHP5, которая найдет текущую неделю календаря и вернет даты каждого дня недели как массив, начиная с понедельника? Например, если функция была запущена сегодня (Thu Feb 25 2010), функция вернет массив, например:
[0] => Mon Feb 22 2010<br /> [1] => Tue Feb 23 2010<br /> [2] => Wed Feb 24 2010<br /> [3] => Thu Feb 25 2010<br /> [4] => Fri Feb 26 2010<br /> [5] => Sat Feb 27 2010<br /> [6] => Sun Feb 28 2010<br /> 
Неважно, в каком формате даты хранятся как в массиве, так как я предполагаю, что было бы очень легко изменить. Кроме того, было бы неплохо, если бы у вас была возможность указать дату в качестве параметра и получить календарную неделю этой даты вместо текущей.
Благодаря!
  Я предполагаю, что решение должно состоять в том, чтобы получить strtotime метку, соответствующую последнему понедельнику, используя strtotime : 
 $timestampFirstDay = strtotime('last monday'); 
Но если вы попробуете сегодня (в четверг) , что-то вроде этого:
 $timestampFirstDay = strtotime('last thursday'); var_dump(date('Ym-d', $timestampFirstDay)); 
ты получишь :
 string '2010-02-18' (length=10) 
т.е. на прошлой неделе … Для strtotime «последний» означает «тот, который был до сегодняшнего дня» .
  Это означает, что вам нужно будет проверить, является ли сегодня «последним понедельником», возвращенное strtotime плюс одна неделя – и, если да, добавьте одну неделю … 
Вот возможное решение (возможно, более умное) :
 $timestampFirstDay = strtotime('last monday'); if (date('Ym-d', $timestampFirstDay) == date('Ym-d', time() - 7*24*3600)) { // we are that day... => add one week $timestampFirstDay += 7 * 24 * 3600; } 
  И теперь, когда у нас есть отметка времени «последний понедельник» , мы можем написать простую петлю for циклов, которая циклически 7 раз, добавив 1 день каждый раз, например: 
 $currentDay = $timestampFirstDay; for ($i = 0 ; $i < 7 ; $i++) { echo date('Ym-d', $currentDay) . '<br />'; $currentDay += 24 * 3600; } 
Что даст нам такой выход:
 2010-02-22 2010-02-23 2010-02-24 2010-02-25 2010-02-26 2010-02-27 2010-02-28 
Теперь, до вас:
for цикла, чтобы он сохранял даты в массиве date Повеселись 😉
Лизингополучатель. , Во-первых, чтобы избежать каких-либо проблем с часовым поясом, я бы привязал к полудню в тот день, когда вы хотите сравнить, так что час в любом случае не вызовет никаких проблем.
 $dateCompare = time(); // replace with a parameter $dateCompare = mktime(12, 0, 0, date('n', $dateCompare), date('j', $dateCompare), date('Y', $dateCompare)); 
Затем найдите день недели вашей даты.
 $dow = date('N', $dateCompare); 
1 – понедельник, так что выясните, сколько дней с понедельника мы.
 $days = $dow - 1; 
Теперь вычитайте количество дней в секундах, пока вы не вернетесь в понедельник.
 $dateCompare -= (3600 * 24 * $days); 
Теперь соберите свой массив дней.
 $output = array(); for ($x = 0; $x < 7; $x++) { $output[$x] = $dateCompare + ($x * 24 * 3600); } 
Это массив временных меток, но вы можете сохранить даты как строки, если хотите.