Home » Php » Get date for monday and friday for the current week (PHP)

Get date for monday and friday for the current week (PHP)

Posted by: admin April 23, 2020 Leave a comment


How can I get the date for monday and friday for the current week?

I have the following code, but it fails if current day is sunday or saturday.

$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"));
How to&Answers:

These strtotime inputs work very well:

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

All you need to do is to wrap the logic inside some if statements.


Best solution would be:

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


This question needs a DateTime answer:-

 * @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)

See it working


This really depends on how you define a week but I came up with this function that will give you the date for the nearest “monday” or “friday” (or any day for that matter):

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));
        return date("Y-m-d", strtotime('last '.$day));


Input: a day of the week (“sunday”, “Monday”, etc.)

Output: If I asked for the nearest “sunday” and today is:

  1. “Sunday”: I will get today’s date
  2. “Monday”: I will get yesterday’s date
  3. “Saturday: I will get tomorrow’s date

Hope this helps 🙂


As the top answer suggests, using PHP’s strtotime() function is the easiest way.

However, instead of using if statements as he suggests, you could simply reset back to the previous Sunday and grab the dates you require from there.

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


i use :

$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')));


I needed a definition of the current week per ISO 8601. I want Monday to always be defined as the Monday that started this current week.

The following solution works excellent for me:

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

For $monday, this method will always return the Monday that started this calendar week. unfortunately, this method relies on PHP 5.1 to parse the o date format.

To get any day of the week, you could try:

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;
        return strtotime("next $day_name",$monday);




I was looking for a similar thing, except I wanted any Monday, not just this week. This is what I came up with:

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;

It accepts an arbitrary date and gives the Sunday. Then you can easily add back days to get Monday through Saturday.