-1

I have a week number of the year and the week day, I need to get the exact date.

This is what I have tried so far. I found this code on stack overflow but it is not accurate:

function required_date($week_num, $day) {
  $week_of_year = sprintf('%02d', date('W', strtotime(date('Y-m-01'))) + $week_num);
  $day_of_week  = date('N', strtotime($day));
  $timestamp    = strtotime(date('Y') . '-W' . $week_of_year . '-' . $day_of_week);

  return $timestamp;
}


$timestamp = required_date(8, 'wednesday');
echo date('Y-m-d', $timestamp);

OUTPUT: 2014-03-26

EXPECTED OUTPUT: The 8th week and day wednesday has date 2014-02-19 according to the calendar.

Jade
  • 153
  • 3
  • 11

2 Answers2

0

Alright, I figured it out myself, Here is the code:

function getWeekDates($week, $year)
{

    $time = strtotime("1 January $year", time());
    $day = date('w', $time);
    $time += ((7*$week)+1-$day)*24*3600;
    // date on monday for the week 
    $return["Monday"] = date('Y-n-j', $time);
    $time += 1*24*3600;
    // date on tuesday for the week 
    $return["Tuesday"] = date('Y-n-j', $time);
    $time += 1*24*3600;
    // date on wednesday for the week 
    $return["Wednesday"] = date('Y-n-j', $time);
    $time += 1*24*3600;
    // date on thursday for the week 
    $return["Thursday"] = date('Y-n-j', $time);
    $time += 1*24*3600;
    // date on friday for the week 
    $return["Friday"] = date('Y-n-j', $time);
    $time += 1*24*3600;
    // date on Saturday for the week 
    $return["Saturday"] = date('Y-n-j', $time);
    $time += 1*24*3600;
    // date on Sunday for the week 
    $return["Sunday"] = date('Y-n-j', $time);

    // Returning Array containing all the dates for the days of that specific week of the year.
    return $return;
}
// Lets assume I need dates for week number 7 of the year 2014.
print_r (getWeekDates(7, 2014));
Jade
  • 153
  • 3
  • 11
0

you can also use strtotime function. I once did this as like as below::

<?php

   function required_date($week_num, $day) {
    // get the present week number: exp: 8 
$presentWeek = date("W", strtotime("now"));  

    // get the present day number : exp: 2
$presentDay = date("w", strtotime("now")); 

    // convert the given day string into number
$givenDay = date("w", strtotime("{$day}"));

    // subtract two value of week number
$week = $week_num - $presentWeek;

    // subtract two value of day number
$day = $givenDay - $presentDay;

    // get the value
$timestamp = strtotime(" $week week $day day");
return $timestamp;
 }


 $timestamp = required_date(14, 'wednesday');
 echo date('Y-m-d', $timestamp);

?>
sabbir
  • 2,020
  • 3
  • 26
  • 48