Get week starting and ending date in PHP

This is how you can get the week starting date or ending date by giving a week number and the year.

<?php

$monday   
= date('Ymd', strtotime("2013-W01-1"));
$sunday    = date('Ymd', strtotime("2013-W01-7"));

?>

<?php
/**
 * Get starting date from week number and year
 * Monday is first day of week
 *
 * @param unknown_type $wk_num
 * @param unknown_type $yr
 * @param unknown_type $first
 * @param unknown_type $format
 * @return unknown
 */
function week_start_date($week, $year, $format = 'Ymd', $date = FALSE) {
   
    if (
$date) {
       
$week = date("W", strtotime($date));
       
$year = date("o", strtotime($date));
    }

   
$week = sprintf("%02s", $week);

   
$desiredMonday = date($format, strtotime("$year-W$week-1"));

    return
$desiredMonday;
}

$sStartDate = week_start_date($week_number, $year);
$sEndDate   = date('Y-m-d', strtotime('+6 days', strtotime($sStartDate)));

?>

Reference : http://www.phpbuilder.com/board/showthread.php?t=10222903

Going from date or timestamp to get the week start and end date this call might be a better way to go.

<?php
$time
= strtotime("2011-01-01");
//or
$time = strtotime("2010-12-31");

$first_day_of_week = date('Y-m-d', strtotime('Last Monday', $time));
$last_day_of_week = date('Y-m-d', strtotime('Next Sunday', $time));

//Will give the same result
//2010-12-27
//2011-01-02
?>

<?php
/**
 * Get week and its start and ending date
 *
 * @param unknown_type $date
 */
function week_start_end_by_date($date, $format = 'Ymd') {
   
   
//Is $date timestamp or date?
   
if (is_numeric($date) AND strlen($date) == 10) {
       
$time = $date;
    }else{
       
$time = strtotime($date);
    }
   
   
$week['week'] = date('W', $time);
   
$week['year'] = date('o', $time);
   
$week['year_week']           = date('oW', $time);
   
$first_day_of_week_timestamp = strtotime($week['year']."W".str_pad($week['week'],2,"0",STR_PAD_LEFT));
   
$week['first_day_of_week']   = date($format, $first_day_of_week_timestamp);
   
$week['first_day_of_week_timestamp'] = $first_day_of_week_timestamp;
   
$last_day_of_week_timestamp = strtotime($week['first_day_of_week']. " +6 days");
   
$week['last_day_of_week']   = date($format, $last_day_of_week_timestamp);
   
$week['last_day_of_week_timestamp']  = $last_day_of_week_timestamp;
   
    return
$week;
}
?>
Knowledge keywords: