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

后端 未结 8 1374
情话喂你
情话喂你 2020-12-01 03:46

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.

$cu         


        
相关标签:
8条回答
  • 2020-12-01 03:57

    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.

    0 讨论(0)
  • 2020-12-01 03:58

    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;
    }
    

    Usage:

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

    Output:

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

    See it working

    0 讨论(0)
  • 2020-12-01 04:04

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

    Usage:

    time_for_week_day('wednesday');
    time_for_week_day('friday',strtotime('2014-12-25'));
    
    0 讨论(0)
  • 2020-12-01 04:12

    Best solution would be:

    $monday = date( 'Y-m-d', strtotime( 'monday this week' ) );
    $friday = date( 'Y-m-d', strtotime( 'friday this week' ) );
    
    0 讨论(0)
  • 2020-12-01 04:15

    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')));
    
    0 讨论(0)
  • 2020-12-01 04:18

    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.

    0 讨论(0)
提交回复
热议问题