Php get week start and end date

I've seen some variants on this question but I believe this one hasn't been answered yet.

I need to get the starting date and ending date of a week, chosen by year and week number (not a date)

example:

input:

getStartAndEndDate($week, $year);

output:

$return[0] = $firstDay;
$return[1] = $lastDay;

The return value will be something like an array in which the first entry is the week starting date and the second being the ending date.

OPTIONAL: while we are at it, the date format needs to be Y-n-j (normal date format, no leading zeros.

I've tried editing existing functions that almost did what I wanted but I had no luck so far.

Please help me out, thanks in advance.

Php get week start and end date

Mat

198k40 gold badges385 silver badges400 bronze badges

asked Feb 1, 2011 at 10:24

1

Using DateTime class:

function getStartAndEndDate($week, $year) {
  $dto = new DateTime();
  $dto->setISODate($year, $week);
  $ret['week_start'] = $dto->format('Y-m-d');
  $dto->modify('+6 days');
  $ret['week_end'] = $dto->format('Y-m-d');
  return $ret;
}

$week_array = getStartAndEndDate(52,2013);
print_r($week_array);

Returns:

Array
(
    [week_start] => 2013-12-23
    [week_end] => 2013-12-29
)

Explained:

  • Create a new DateTime object which defaults to now()
  • Call setISODate to change object to first day of $week of $year instead of now()
  • Format date as 'Y-m-d' and put in $ret['week_start']
  • Modify the object by adding 6 days, which will be the end of $week
  • Format date as 'Y-m-d' and put in $ret['week_end']

A shorter version (works in >= php5.3):

function getStartAndEndDate($week, $year) {
  $dto = new DateTime();
  $ret['week_start'] = $dto->setISODate($year, $week)->format('Y-m-d');
  $ret['week_end'] = $dto->modify('+6 days')->format('Y-m-d');
  return $ret;
}

Could be shortened with class member access on instantiation in >= php5.4.

answered Dec 16, 2013 at 22:30

user3108829user3108829

1,6912 gold badges10 silver badges3 bronze badges

4

Many years ago, I found this function:

function getStartAndEndDate($week, $year) {
  $dto = new DateTime();
  $dto->setISODate($year, $week);
  $ret['week_start'] = $dto->format('Y-m-d');
  $dto->modify('+6 days');
  $ret['week_end'] = $dto->format('Y-m-d');
  return $ret;
}

$week_array = getStartAndEndDate(52,2013);
print_r($week_array);

answered Feb 1, 2011 at 11:41

Roham RafiiRoham Rafii

2,8137 gold badges34 silver badges44 bronze badges

0

We can achieve this easily without the need for extra computations apart from those inherent to the DateTime class.

function getStartAndEndDate($year, $week)
{
   return [
      (new DateTime())->setISODate($year, $week)->format('Y-m-d'), //start date
      (new DateTime())->setISODate($year, $week, 7)->format('Y-m-d') //end date
   ];
}

The setISODate() function takes three arguments: $year, $week, and $day respectively, where $day defaults to 1 - the first day of the week. We therefore pass 7 to get the exact date of the 7th day of the $week.

answered Apr 21, 2016 at 8:54

Php get week start and end date

0

Slightly neater solution, using the "[year]W[week][day]" strtotime format:

function getStartAndEndDate($week, $year) {
  // Adding leading zeros for weeks 1 - 9.
  $date_string = $year . 'W' . sprintf('%02d', $week);
  $return[0] = date('Y-n-j', strtotime($date_string));
  $return[1] = date('Y-n-j', strtotime($date_string . '7'));
  return $return;
}

answered Jan 20, 2013 at 23:26

tripper54tripper54

3462 silver badges6 bronze badges

shortest way to do it:

function week_date($week, $year){
    $date = new DateTime();
    return "first day of the week is ".$date->setISODate($year, $week, "1")->format('Y-m-d')
    ."and last day of the week is ".$date->setISODate($year, $week, "7")->format('Y-m-d'); 
}
echo week_date(12,2014);

answered Jul 5, 2015 at 15:37

Php get week start and end date

Claudiu CreangaClaudiu Creanga

7,65010 gold badges64 silver badges106 bronze badges

You can get the specific day of week from date as bellow that I get the first and last day

$date = date_create();

// get the first day of the week
date_isodate_set($date, 2019, 1);

    //convert date format and show     
    echo date_format($date, 'Y-m-d') . "\n";

// get the last date of the week
date_isodate_set($date, 2019, 1, 7);

     //convert date format and show        
     echo date_format($date, 'Y-m-d') . "\n";

Output =>

2018-12-31

2019-01-06

answered Mar 5, 2019 at 5:20

Php get week start and end date

The calculation of Roham Rafii is wrong. Here is a short solution:

// week number to timestamp (first day of week number)
function wn2ts($week, $year) {
    return strtotime(sprintf('%dW%02d', $year, $week));
}

if you want the last day of the week number, you can add up 6 * 24 * 3600

answered Feb 7, 2015 at 16:45

Php get week start and end date

This is an old question, but many of the answers posted above appear to be incorrect. I came up with my own solution:

function getStartAndEndDate($week, $year){
    $dates[0] = date("Y-m-d", strtotime($year.'W'.str_pad($week, 2, 0, STR_PAD_LEFT)));
    $dates[1] = date("Y-m-d", strtotime($year.'W'.str_pad($week, 2, 0, STR_PAD_LEFT).' +6 days'));
    return $dates;
}

answered May 6, 2015 at 20:51

bezzbezz

1,26817 silver badges28 bronze badges

0

First we need a day from that week so by knowing the week number and knowing that a week has seven days we are going to do so the

$pickADay = ($weekNo-1) * 7 + 3;

this way pickAday will be a day in our desired week.

Now because we know the year we can check which day is that. things are simple if we only need dates newer than unix timestamp We will get the unix timestamp for the first day of the year and add to that 24*3600*$pickADay and all is simple from here because we have it's timestamp we can know what day of the week it is and calculate the head and tail of that week accordingly.

If we want to find out the same thing of let's say 12th week of 1848 we must use another approach as we can not get the timestamp. Knowing that each year a day advances 1 weekday meaning (1st of november last year was on a sunday, this year is on a monday, exception for the leap years when it advances 2 days I believe, you can check that ). What I would do if the year is older than 1970 than make a difference between it and the needed year to know how many years are there, calculate the day of the week as my pickADay was part of 1970, shift it back one weekday for each. $shiftTimes = ($yearDifference + $numberOfLeapYears)%7, in the difference. shift the day backwords $shiftTimes, then you will know what day of the week was that day those years ago, then find the weekhead and weektail. Same thing can be used also for the future if it seems simpler. Try it if it works and tell me if it does not.

Php get week start and end date

Nandu

3,0107 gold badges31 silver badges51 bronze badges

answered Feb 1, 2011 at 10:57

Catalin MarinCatalin Marin

1,2421 gold badge11 silver badges18 bronze badges

1

For documentation (since Google ranks this question first when searching for "php datetime start end this week").

If you need the startdate and enddate for the current week (using DateTime):

$dateTime = new DateTime('now');
$monday = clone $dateTime->modify(('Sunday' == $dateTime->format('l')) ? 'Monday last week' : 'Monday this week');
$sunday = clone $dateTime->modify('Sunday this week');

var_dump($monday->format('Y-m-d')); // e.g. 2018-06-25
var_dump($sunday->format('Y-m-d')); // e.g. 2018-07-01

Hope this will help.

answered Jun 28, 2018 at 9:44

Php get week start and end date

AvatarAvatar

13.4k8 gold badges112 silver badges185 bronze badges

Have you tried PHP relative dates? It might work.

answered Feb 1, 2011 at 10:33

MikelMikel

24.1k8 gold badges63 silver badges66 bronze badges

2

Even if you dont want to use a specific date you cannot escape it. You can calculate a week based on the date ONLY.

Steps:

  1. get the first day of the year
  2. decide when the first week starts ( there are some rules that include first Thursday if I remember.
  3. add some number of weeks (your first param). Zend_Date has an add() function where you can add weeks for example. This will give you the first day of the week.
  4. offset and get the last day.

I would recommend working with a consistent dates sistem like Zend_Date or Pear Date.

answered Feb 1, 2011 at 11:26

Elzo ValugiElzo Valugi

26.4k14 gold badges91 silver badges114 bronze badges

function getStartAndEndDate($week, $year)
    {
        $week_start = new DateTime();
        $week_start->setISODate($year,$week);
        $return[0] = $week_start->format('d-M-Y');
        $time = strtotime($return[0], time());
        $time += 6*24*3600;
        $return[1] = date('d-M-Y', $time);
        return $return;
    }

answered Aug 14, 2013 at 18:44

1

$dateParam = '2018-06-10';
$week = date('w', strtotime($dateParam));
$date = new DateTime($dateParam);
$firstWeek = $date->modify("-".$week." day")->format("Y-m-d H:i:s");
$endWeek = $date->modify("+6 day")->format("Y-m-d H:i:s");
echo $firstWeek."
"; echo $endWeek;

will print

2018-06-10 00:00:00
2018-06-16 00:00:00

hopefully will help

answered Jun 21, 2018 at 9:28

The "first day of the week" is subjective. Some cultures use "Monday" others "Sunday", maybe others something else?

For my purposes, I want the first day of the week to be "Sunday" and the last day of the week to be "Saturday".

Also, using DateTime with no arguments will default to "now" which includes the current time. The following method will disregard the current time by specifying "today" in the DateTime constructor.

Furthermore the string "sunday this week" does not seem to be reliable. It actually will return Sunday the next week (according to my view of what a week is).

I've built a method which returns a PHP object containing two DateTime objects. One for the first day (Sunday) of the given week, the second for the last day (Saturday) of the given week.

function get_first_and_last_day_of_week( $year_number, $week_number ) {
    // we need to specify 'today' otherwise datetime constructor uses 'now' which includes current time
    $today = new DateTime( 'today' );

    return (object) [
        'first_day' => clone $today->setISODate( $year_number, $week_number, 0 ),
        'last_day'  => clone $today->setISODate( $year_number, $week_number, 6 )
    ];
}

answered Aug 12, 2019 at 15:16

jeremysawesomejeremysawesome

6,8555 gold badges33 silver badges37 bronze badges

How to get start and end date of week in php?

getStartAndEndDate($week, $year); output: $return[0] = $firstDay; $return[1] = $lastDay; The return value will be something like an array in which the first entry is the week starting date and the second being the ending date.

How to get week end date in php?

PHP Code: $dt='2011-01-04'; $dt1 = strtotime($dt); $dt2 = date("l", $dt1); $dt3 = strtolower($dt2); if(($dt3 == "saturday" )|| ($dt3 == "sunday")) { echo $dt3. ' is weekend'.

How to get week start date in php?

Use strtotime() function to get the first day of week using PHP. This function returns the default time variable timestamp and then use date() function to convert timestamp date into understandable date.

How do you determine the first day of the week?

To get the first day of the week, we subtract the day of the week from the day of the month. If the day of the week is Sunday, we subtract 6 to get Monday, if it is any other day we add 1 , because the getDay method returns a zero-based value.