2015-03-10 3 views
0

Есть короткая функция предварительной установки, чтобы найти начало (понедельник) и конец (воскресенье) недели по данному $date?начало и конец недели по данной дате

Я попробовал: 1)

date("Y-m-d", strtotime('sunday this week ' . $date)); 
date("Y-m-d", strtotime('monday this week ' . $date)); 

Но это не удается, когда $date это воскресенье ... он возвращается в понедельник следующей недели.

2) также это

date("Y-m-d", strtotime('last monday ' . $date)); 
date("Y-m-d", strtotime('next sunday ' . $date)); 

Но опять же, если $date в понедельник или воскресенье он дает предыдущей/следующей неделе.

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

+0

Какая версия php вы используете? – Anthony

+3

@Кори не в моей стране, а в половине мира деловая неделя начинается в понедельник. –

+0

@ Энтони PHP 5.4+ –

ответ

1

Вы можете использовать DateTime::format('N'), чтобы получить день ISO-8601 недели (1 = понедельник .. 7 = воскресенье) и выполнить небольшую арифметику даты, чтобы получить понедельник и воскресенье недели, которые содержат указанную дату (Я предполагаю, что вы хотите, чтобы неделя начиналась в понедельник).

// Today (or any other day you like) 
$today = new DateTime('now'); 
echo('Today: '.$today->format('Y-m-d (D)')."\n"); 

// Day of week (1 = Monday .. 7 = Sunday) 
$dow = $today->format('N'); 

// Monday is ($dow-1) days in the past 
$monday = clone $today; 
$monday->sub(new DateInterval('P'.($dow-1).'D')); 
echo('Monday: '.$monday->format('Y-m-d')."\n"); 

// Sunday is 6 days after Monday 
$sunday = clone $monday; 
$sunday->add(new DateInterval('P6D')); 
echo('Sunday: '.$sunday->format('Y-m-d')."\n"); 
Смежные вопросы