Split dates vary in respective weeks

I have date ranges to call on and to.I want to convert it to weeks. Let's assume that from the date 1-10-2014 and today is 10/31/2014

Then the result is:

1st week: 01-10-2014 to 04-10-2014 2: 05-102014 to 11-10-2014 3: 12-10-2014 to 18-10-2014 4: 19-10-2014 to 25- 10-2014 5: 26-10-2014 to 31-10-2014

In php.I try several codes but that didn't give an absolute result, only give 1 to 7, 8 to 14, etc. Pls help.

I am already trying to get answers from

Get the date of one week from today with PHP in stack overflow


date("Y-m-d",strtotime("+1 week"));

      

+3


source to share


2 answers


This snippet uses Sunday as the first day of the week:

    $start = new DateTime('2014-10-01');
    $end = new DateTime('2014-10-31 23:59');
    $interval = new DateInterval('P1D');
    $dateRange = new DatePeriod($start, $interval, $end);

    $weekNumber = 1;
    $weeks = array();
    foreach ($dateRange as $date) {
        $weeks[$weekNumber][] = $date->format('Y-m-d');
        if ($date->format('w') == 6) {
            $weekNumber++;
        }
    }

      

Each week will have all the days in it.

If you just want the first and last days of each week, you can simply use array_shift

and array_pop

to get them. For example, for the first week, you can use:

    $wk1Start = array_shift($weeks[1]); //gives you first day of week 1
    $wk1End = array_pop($weeks[1]); // give you the last day of week 1

      



If you want start and end dates for each week, here's how to do it:

    $ranges = array_map(function($week) {
        return 'start: ' . array_shift($week) 
            . ', end: ' . array_pop($week); },
    $weeks);

      

This is the output $ranges

for me:

    Array
    (
        [1] => start: 2014-10-01, end: 2014-10-04
        [2] => start: 2014-10-05, end: 2014-10-11
        [3] => start: 2014-10-12, end: 2014-10-18
        [4] => start: 2014-10-19, end: 2014-10-25
        [5] => start: 2014-10-26, end: 2014-10-31
    )

      

+7


source


Try

$start_date = date('Y-m-d', strtotime('2014-10-01'));
$end_date = date('Y-m-d', strtotime('2014-10-31'));
$i=1;
for($date = $start_date; $date <= $end_date; $date = date('Y-m-d', strtotime($date. ' + 7 days'))) {
    echo getWeekDates($date, $start_date, $end_date, $i);
    echo "\n";
    $i++;
}

function getWeekDates($date, $start_date, $end_date, $i) {
    $week =  date('W', strtotime($date));
    $year =  date('Y', strtotime($date));
    $from = date("Y-m-d", strtotime("{$year}-W{$week}+1")); //Returns the date of monday in week
    if($from < $start_date) $from = $start_date;
    $to = date("Y-m-d", strtotime("{$year}-W{$week}-7"));   //Returns the date of sunday in week
    if($to > $end_date) $to = $end_date;
    echo "$i th ".$from." to ".$to.'<br>';
}  

      



output: -

1 th 2014-10-01 to 2014-10-05
2 th 2014-10-06 to 2014-10-12
3 th 2014-10-13 to 2014-10-19
4 th 2014-10-20 to 2014-10-26
5 th 2014-10-27 to 2014-10-31

      

0


source







All Articles