Подтвердить что ты не робот

Получить дату в понедельник и пятницу на текущей неделе (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"));
4b9b3361

Ответ 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')));