Получить первый месяц месяца для заданного набора дат

Что я требую

У меня есть определенный список дат. Я хочу получить первый понедельник каждого времени.

например: Предположим, что данные

2013-07-05 2013-08-05, 2013-09-13 etc. 

Я хочу получить первый понедельник всех этих дней, чтобы результат

  2013-07-01, 2013-08-05, 2013-09-02 respectively 

Я фактически застрял в этом, используя stftime .

 strftime("%d/%m/%Y", strtotime("first Monday of July 2012")); 

Использование класса php Datetime:

 $Dates = array('2013-07-02', '2013-08-05', '2013-09-13'); foreach ($Dates as $Date) { $test = new DateTime($Date); echo $test->modify('first monday')->format('Ym-d'); } 
 <?php function find_the_first_monday($date) { $time = strtotime($date); $year = date('Y', $time); $month = date('m', $time); for($day = 1; $day <= 31; $day++) { $time = mktime(0, 0, 0, $month, $day, $year); if (date('N', $time) == 1) { return date('Ym-d', $time); } } } echo find_the_first_monday('2013-07-05'), "\n"; echo find_the_first_monday('2013-08-05'), "\n"; echo find_the_first_monday('2013-09-13'), "\n"; // output: // 2013-07-01 // 2013-08-05 // 2013-09-02 

первый понедельник будет в течение первых 7 дней месяца, DAYOFWEEK(date) возвращает 1 = воскресенье, 2 = понедельник и т. д.

также см. взлом # 23 http://oreilly.com/catalog/sqlhks/chapter/ch04.pdf

Вы можете пройти через массив дат, а затем выйти из цикла и вернуть $Date когда вы впервые встретите понедельник

PHPFIDDLE

 $Dates = array('2013-07-02', '2013-08-05', '2013-09-13'); foreach ($Dates as $Date) { $weekday = date('l', strtotime($Date)); if($weekday == 'Monday') { echo "First Monday in list is - " . $Date; break; } } 

Вывод

First Monday in list is - 2013-08-05