Wednesday, February 19, 2014

Calculating week of the year for given N week ago from Current week in PHP

My web site : Info Tech Vedas

/*
This is function has written to get (N) weeks ago start date of week and end date of the week



Note: Required PHP version 5.3 or greater

Current Date : 19-Feb-2014

Input : Start Date / End Date of Current week(201408), week with - (2014-08) current : 2014-02-16,2014-02-22

Expected Output : Start Date / End Date of week(201403), week with - (2014-03) 5 ago: 2014-01-12,2014-01-18

Result :
    Array(
        [currentweek] => 08
        [currentdate] => 08, 2014-02-19, 3
        [startdateofcurrentweek] => 2014-02-16
        [enddateofcurrentweek] => 2014-02-22
        [weekago] => 201403
        [startdateofagoweek] => 2014-01-12
        [enddateofagoweek] => 2014-01-18)

*/

$iWeeksAgo = 5;// need weeks ago
$sWeekDayStartOn = 0;// 0 - Sunday, 1 - Monday, 2 - Tuesday
$aWeeksDetails = getWeekDetails($iWeeksAgo, $sWeekDayStartOn);

print_r($aWeeksDetails);
die('end of line of getWeekDetails ');

function getWeekDetails($iWeeksAgo, $sWeekDayStartOn){
    $date = new DateTime();
    $sCurrentDate = $date->format('W, Y-m-d, w');
    #echo 'Current Date (Week of the year, YYYY-MM-DD, day of week ): ' . $sCurrentDate . "\n";

    $iWeekOfTheYear = $date->format('W');// Week of the Year i.e. 19-Feb-2014 = 08
    $iDayOfWeek = $date->format('w');// day of week for the current month i.e. 19-Feb-2014 = 4
    $iDayOfMonth = $date->format('d'); // date of the month i.e. 19-Feb-2014 = 19

    $iNoDaysAdd = 6;// number of days adding to get last date of the week i.e. 19-Feb-2014  + 6 days = 25-Feb-2014

    $date->sub(new DateInterval("P{$iDayOfWeek}D"));// getting start date of the week
    $sStartDateOfWeek = $date->format('Y-m-d');// getting start date of the week

    $date->add(new DateInterval("P{$iNoDaysAdd}D"));// getting end date of the week
    $sEndDateOfWeek = $date->format('Y-m-d');// getting end date of the week
   
    $iWeekOfTheYearWeek = (string) $date->format('YW');//week of the year
    $iWeekOfTheYearWeekWithPeriod = (string) $date->format('Y-W');//week of the year with year

    //To check uncomment
    #echo "Start Date / End Date of Current week($iWeekOfTheYearWeek), week with - ($iWeekOfTheYearWeekWithPeriod) : " . $sStartDateOfWeek . ',' . $sEndDateOfWeek . "\n";
   
    $iDaysAgo = ($iWeeksAgo*7) + $iNoDaysAdd + $sWeekDayStartOn;// getting 4 weeks ago i.e. no. of days to substract

    $date->sub(new DateInterval("P{$iDaysAgo}D"));// getting 4 weeks ago i.e. no. of days to substract
    $sStartDateOfWeekAgo = $date->format('Y-m-d');// getting 4 weeks ago start date i.e. 19-Jan-2014

    $date->add(new DateInterval("P{$iNoDaysAdd}D")); // getting 4 weeks ago end date i.e. 25-Jan-2014
    $sEndDateOfWeekAgo = $date->format('Y-m-d');// getting 4 weeks ago start date i.e. 25-Jan-2014

    $iProccessedWeekAgoOfTheYear = (string) $date->format('YW');//ago week of the year
    $iProccessedWeekOfTheYearWeekAgo = (string) $date->format('YW');//ago week of the year with year
    $iProccessedWeekOfTheYearWeekWithPeriodAgo = (string) $date->format('Y-W');//ago week of the year with year
   
    //To check uncomment
    #echo "Start Date / End Date of week($iProccessedWeekOfTheYearWeekAgo), week with - ($iProccessedWeekOfTheYearWeekWithPeriodAgo) ago: " . $sStartDateOfWeekAgo . ',' . $sEndDateOfWeekAgo . "\n";
   
    $aWeeksDetails = array ('weeksago' => $iWeeksAgo, 'currentweek' => $iWeekOfTheYear, 'currentdate' => $sCurrentDate, 'startdateofcurrentweek' => $sStartDateOfWeek,  'enddateofcurrentweek' => $sEndDateOfWeek,
                            'weekagoyearweek' => $iProccessedWeekAgoOfTheYear, 'startdateofagoweek' => $sStartDateOfWeekAgo,  'enddateofagoweek' => $sEndDateOfWeekAgo);
   
    return $aWeeksDetails;
}
?>

No comments:

Post a Comment