Intereting Posts

Получить дату в понедельник и пятницу на текущей неделе (PHP)

Как я могу получить дату понедельника и пятницы на текущую неделю?

У меня есть следующий код, но он не работает, если текущий день – воскресенье или суббота.

$current_day = date("N"); $days_to_friday = 5 - $current_day; $days_from_monday = $current_day - 1; $monday = date("Ymd", strtotime("- {$days_from_monday} Days")); $friday = date("Ymd", strtotime("+ {$days_to_friday} Days")); 

Эти входы strtotime работают очень хорошо:

 strtotime( "next monday" ); strtotime( "previous monday" ); strtotime( "today" ); strtotime( "next friday" ); strtotime( "previous friday" ); 

Все, что вам нужно сделать, это обернуть логику внутри некоторых операторов if.

Лучшим решением было бы:

 $monday = date( 'Ym-d', strtotime( 'monday this week' ) ); $friday = date( 'Ym-d', strtotime( 'friday this week' ) ); 

Этот вопрос требует ответа DateTime: –

 /** * @param String $day * @return DateTime */ function getDay($day) { $days = ['Monday' => 1, 'Tuesday' => 2, 'Wednesday' => 3, 'Thursday' => 4, 'Friday' => 5, 'Saturday' => 6, 'Sunday' => 7]; $today = new \DateTime(); $today->setISODate((int)$today->format('o'), (int)$today->format('W'), $days[ucfirst($day)]); return $today; } 

Применение:

 var_dump(getDay('Monday')->format('l dS F Y')); var_dump(getDay('Friday')->format('l dS F Y')); 

Вывод:

 string 'Monday 30th September 2013' (length=26) string 'Friday 04th October 2013' (length=24) 

Посмотрите, как работает

Это зависит от того, как вы определяете неделю, но я придумал эту функцию, которая даст вам дату ближайшего «понедельника» или «пятницы» (или любого дня, если на то пошло):

 function closestDate($day){ $day = ucfirst($day); if(date('l', time()) == $day) return date("Ymd", time()); else if(abs(time()-strtotime('next '.$day)) < abs(time()-strtotime('last '.$day))) return date("Ymd", strtotime('next '.$day)); else return date("Ymd", strtotime('last '.$day)); } 

Вход: день недели («воскресенье», «понедельник» и т. Д.)

Выход: если бы я попросил ближайшее «воскресенье» и сегодня:

  1. «Воскресенье»: я получу сегодняшнюю дату
  2. «Понедельник»: я получу вчерашнюю дату
  3. «Суббота: я получу дату завтра

Надеюсь это поможет 🙂

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

Следующее решение отлично подходит для меня:

 $monday = strtotime(date('o-\WW')); $friday = strtotime("next friday",$monday); 

В течение $monday этот метод всегда будет возвращать понедельник, начавшее эту календарную неделю. К сожалению, этот метод использует PHP 5.1 для анализа формата даты.

Чтобы получить любой день недели, вы можете попробовать:

 function time_for_week_day($day_name, $ref_time=null){ $monday = strtotime(date('o-\WW',$ref_time)); if(substr(strtoupper($day_name),0,3) === "MON") return $monday; else return strtotime("next $day_name",$monday); } 

Применение:

 time_for_week_day('wednesday'); time_for_week_day('friday',strtotime('2014-12-25')); 

Как следует из главного ответа, использование функции strtotime () PHP является самым простым способом.

Однако вместо использования инструкций if, как он предлагает, вы можете просто вернуться к предыдущему воскресенью и получить нужные вам даты.

 $monday = strtotime('next monday', strtotime('previous sunday')); $friday = strtotime('next friday', strtotime('previous sunday')); 

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

 function getSunday(DateTime $date){ $outdate = clone($date); $day = $date->format("w"); // get the weekday (sunday is 0) $outdate->sub(new DateInterval("P".$day."D")); // subtracting the weekday from the date always gives Sunday return $outdate; } 

Он принимает произвольную дату и дает воскресенье. Затем вы можете легко добавить дни назад, чтобы добраться с понедельника по субботу.

я использую :

 $first_week_date = date('d F Y', strtotime('next Monday -1 week', strtotime('this sunday'))); $last_week_date = date('d F Y', strtotime('next Monday -1 week + 4 days', strtotime('this sunday')));