mingfish_004
mingfish_004

Reputation: 1413

how can I get last week' date range in php?

how can I get last week' date range in php ?

see my codes bellow:

<?php 
    function get_last_week_dates(){
        // how can i get the date range last week ?
        // ex: today is 2014-2-8
        // the week date range of last week should be '2014-1-26 ~ 2014-2-1'
    }
?>

Upvotes: 37

Views: 80952

Answers (12)

f_i
f_i

Reputation: 3342

Carbon

$startOfTheWeek = Carbon::now()->subWeek(1)->startOfWeek();
$endOfTheWeek = Carbon::now()->subWeek(1)->endOfWeek();

From a specific date

$startOfTheWeek = Carbon::parse('2020-03-02')->subWeek(1)->startOfWeek();
$endOfTheWeek = Carbon::parse('2020-03-02')->subWeek(1)->endOfWeek();

Considering the week starts at Monday and ends at Sunday.

Upvotes: 1

Vincent
Vincent

Reputation: 2159

Most of those other solutions offered were off by one day.
If you want Sunday to Saturday for last week, this is the way to do it.

$start = date("Y-m-d",strtotime("last sunday",strtotime("-1 week")));
$end = date("Y-m-d",strtotime("saturday",strtotime("-1 week")));

echo $start. " to ".$end;

Upvotes: 1

Kavvson Empcraft
Kavvson Empcraft

Reputation: 443

This one will produce the proper result and handles the Monday issue

<?php
$monday = strtotime("last monday");
$monday = date('W', $monday)==date('W') ? $monday-7*86400 : $monday;

$sunday = strtotime(date("Y-m-d",$monday)." +6 days");
$this_week_sd = date("Y-m-d",$monday);
$this_week_ed = date("Y-m-d",$sunday);

echo "Last week range from $this_week_sd to $this_week_ed ";
?>

Upvotes: 1

Lifz
Lifz

Reputation: 688

I know this is old but here's a much more succinct way of doing it:

$startDate = date("m/d/y", strtotime(date("w") ? "2 sundays ago" : "last sunday"));
$endDate = date("m/d/y", strtotime("last saturday"));
echo $startDate . " - " . $endDate

Upvotes: 1

Naresh Kumar P
Naresh Kumar P

Reputation: 4210

In order to find the last week start date and end date you can follow up this code for doing it so.

It works on all intervals to find the date interval.

$Current = Date('N');
$DaysToSunday = 7 - $Current;
$DaysFromMonday = $Current - 1;
$Sunday = Date('d/m/y', strtotime("+ {$DaysToSunday} Days"));
$Monday = Date('d/m/y', strtotime("- {$DaysFromMonday} Days"));

If so you need to change it with the datatime() you can perform this function.

$date = new DateTime();
$weekday = $date->format('w');
$diff = 7 + ($weekday == 0 ? 6 : $weekday - 1); // Monday=0, Sunday=6
$date->modify("-$diff day");
echo $date->format('Y-m-d') . ' - ';
$date->modify('+6 day');
echo $date->format('Y-m-d');

Using Functions:

If you want to find the last week range with the help of the functions you can preform like this.

Function:

// returns last week's range
function last_week_range($date) {
$ts = strtotime("$date - 7 days");
$start = (date('w', $ts) == 0) ? $ts : strtotime('last sunday', $ts);
return array(
      date('Y-m-d', $start),
      date('Y-m-d', strtotime('next saturday', $start))
);
}

Usage:

$today=date();
print_r(last_week_range($today));

All the above functions that has been given will return the last week range irrespective of the start day of the week..

Upvotes: 0

PoengAlex
PoengAlex

Reputation: 153

$lastWeekStartTime = strtotime("last sunday",strtotime("-1 week"));
$lastWeekEndTime = strtotime("this sunday",strtotime("-1 week"));
$lastWeekStart = date("Y-m-d",$lastWeekStartTime);
$lastWeekEnd = date("Y-m-d",$lastWeekEndTime);

Upvotes: 0

Abhik Chakraborty
Abhik Chakraborty

Reputation: 44844

You can use strtotime()

$previous_week = strtotime("-1 week +1 day");

$start_week = strtotime("last sunday midnight",$previous_week);
$end_week = strtotime("next saturday",$start_week);

$start_week = date("Y-m-d",$start_week);
$end_week = date("Y-m-d",$end_week);

echo $start_week.' '.$end_week ;

UPDATE

Changed the code to handle sunday. If the current day is sunday then - 1 week will be previous sunday and again getting previous sunday for that will go the one week back.

$previous_week = strtotime("-1 week +1 day");

In addition if we need to find the current week and next week date range we can do as

Current week -

$d = strtotime("today");
$start_week = strtotime("last sunday midnight",$d);
$end_week = strtotime("next saturday",$d);
$start = date("Y-m-d",$start_week); 
$end = date("Y-m-d",$end_week);  

Next Week -

$d = strtotime("+1 week -1 day");
$start_week = strtotime("last sunday midnight",$d);
$end_week = strtotime("next saturday",$d);
$start = date("Y-m-d",$start_week); 
$end = date("Y-m-d",$end_week); 

Upvotes: 95

Pankaj Samal
Pankaj Samal

Reputation: 421

Simply use

date("m/d/Y", strtotime("last week monday"));
date("m/d/Y", strtotime("last week sunday"));

It will give the date of Last week's Monday and Sunday.

Upvotes: 36

MrsPop88
MrsPop88

Reputation: 303

This should do the trick

$startWeek = date('Y-m-d',strtotime("Sunday Last Week"));
$endWeek = date('Y-m-d',strtotime("Sunday This Week"));

this would not work if ran on a Monday. It would get last Sunday (the day before) to the next Sunday. So using Abhik Chakraborty's method with the above:

$startTime = strtotime("last sunday midnight",$previous_week);
$endTime = strtotime("next sunday midnight",$startTime);
$startDate = date('Y-m-d 00:00:00',$startTime);
$endDate = date('Y-m-d 23:59:59',$endTime);

This will now give

start =  2014-08-10 00:00:00
endDate = 2014-08-17 23:59:59

Upvotes: 1

ElDoRado1239
ElDoRado1239

Reputation: 4048

Well just for the fun of trying to solve this:

date_default_timezone_set('UTC');
$firstDayOfLastWeek = mktime(0,0,0,date("m"),date("d")-date("w")-7);
$lastDayOfLastWeek = mktime(0,0,0,date("m"),date("d")-date("w")-1);
echo("Last week began on: ".date("d.m.Y",$firstDayOfLastWeek));
echo("<br>");
echo("Last week ended on: ".date("d.m.Y",$lastDayOfLastWeek));

Upvotes: 2

Ferrakkem Bhuiyan
Ferrakkem Bhuiyan

Reputation: 2783

you need you use strtotime function for this

<center>
<?php
 function get_last_week_dates()
 {
        // how can i get the date range last week ?
        // ex: today is 2014-2-8
        // the week date range of last week should be '2014-1-26 ~ 2014-2-1'

        $startdate = "last monday";
        if (date('N') !== '1')
        { 
            // it's not Monday today
            $startdate .= " last week";
        }
        echo "<br />";
        $day = strtotime($startdate);
        echo date('r', $day);   
        echo "<br />";
        $sunday = strtotime('next monday', $day) - 1;
        echo date('r', $sunday);
    }
    get_last_week_dates();
?>
</center>

Upvotes: 2

Rocky
Rocky

Reputation: 304

You can do this way.

First get the current timestamp and subtract the no.of days you want.

$curTime = time();
echo date("Y-m-d",$curTime);
echo "<br />";
echo date("Y-m-d",($curTime-(60*60*24*7)));

Upvotes: 0

Related Questions