Получить дату в понедельник и пятницу на текущей неделе (PHP)
Как я могу получить дату понедельника и пятницы на текущую неделю?
У меня есть следующий код, но он не работает, если текущий день - воскресенье или суббота.
$current_day = date("N");
$days_to_friday = 5 - $current_day;
$days_from_monday = $current_day - 1;
$monday = date("Y-m-d", strtotime("- {$days_from_monday} Days"));
$friday = date("Y-m-d", strtotime("+ {$days_to_friday} Days"));
Ответы
Ответ 1
Эти входы strtotime работают очень хорошо:
strtotime( "next monday" );
strtotime( "previous monday" );
strtotime( "today" );
strtotime( "next friday" );
strtotime( "previous friday" );
Все, что вам нужно сделать, это обернуть логику внутри некоторых операторов if.
Ответ 2
Лучшее решение:
$monday = date( 'Y-m-d', strtotime( 'monday this week' ) );
$friday = date( 'Y-m-d', strtotime( 'friday this week' ) );
Ответ 3
Этот вопрос нуждается в ответе 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)
Посмотрите, как работает
Ответ 4
Это зависит от того, как вы определяете неделю, но я придумал эту функцию, которая даст вам дату ближайшего "понедельника" или "пятницы" (или любого дня, если на то пошло)
function closestDate($day){
$day = ucfirst($day);
if(date('l', time()) == $day)
return date("Y-m-d", time());
else if(abs(time()-strtotime('next '.$day)) < abs(time()-strtotime('last '.$day)))
return date("Y-m-d", strtotime('next '.$day));
else
return date("Y-m-d", strtotime('last '.$day));
}
Вход: день недели ( "воскресенье", "понедельник" и т.д.)
Выход: если я попрошу ближайшего "воскресенья" и сегодня:
- "Воскресенье": сегодня я получу дату.
- "Понедельник": я получу вчера дату.
- "Суббота: я получу дату завтра.
Надеюсь, что это поможет:)
Ответ 5
Мне нужно определение текущей недели по ISO 8601. Я хочу, чтобы понедельник всегда определялся как понедельник, начавшая эту текущую неделю.
Следующее решение отлично работает для меня:
$monday = strtotime(date('o-\WW'));
$friday = strtotime("next friday",$monday);
Для $monday
этот метод всегда будет возвращать понедельник, который запустил эту календарную неделю. К сожалению, этот метод использует PHP 5.1 для анализа формата даты o
.
Чтобы получить любой день недели, вы можете попробовать:
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'));
Ответ 6
Как показывает верхний ответ, использование PHP strtotime() - это самый простой способ.
Однако вместо использования инструкций if, как он предлагает, вы могли бы просто reset вернуться к предыдущему воскресенью и получить нужные вам даты.
$monday = strtotime('next monday', strtotime('previous sunday'));
$friday = strtotime('next friday', strtotime('previous sunday'));
Ответ 7
Я искал аналогичную вещь, за исключением того, что я хотел любой понедельник, а не только на этой неделе. Вот что я придумал:
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;
}
Он принимает произвольную дату и дает воскресенье. Затем вы можете легко добавить дни назад, чтобы получить с понедельника по субботу.
Ответ 8
i используйте:
$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')));