get startdate and enddate for current quarter php get startdate and enddate for current quarter php codeigniter codeigniter

get startdate and enddate for current quarter php


/*** Compute the start and end date of some fixed o relative quarter in a specific year.* @param mixed $quarter  Integer from 1 to 4 or relative string value:*                        'this', 'current', 'previous', 'first' or 'last'.*                        'this' is equivalent to 'current'. Any other value*                        will be ignored and instead current quarter will be used.*                        Default value 'current'. Particulary, 'previous' value*                        only make sense with current year so if you use it with*                        other year like: get_dates_of_quarter('previous', 1990)*                        the year will be ignored and instead the current year*                        will be used.* @param int $year       Year of the quarter. Any wrong value will be ignored and*                        instead the current year will be used.*                        Default value null (current year).* @param string $format  String to format returned dates* @return array          Array with two elements (keys): start and end date.*/public static function get_dates_of_quarter($quarter = 'current', $year = null, $format = null){    if ( !is_int($year) ) {               $year = (new DateTime)->format('Y');    }    $current_quarter = ceil((new DateTime)->format('n') / 3);    switch (  strtolower($quarter) ) {    case 'this':    case 'current':       $quarter = ceil((new DateTime)->format('n') / 3);       break;    case 'previous':       $year = (new DateTime)->format('Y');       if ($current_quarter == 1) {          $quarter = 4;          $year--;        } else {          $quarter =  $current_quarter - 1;        }        break;    case 'first':        $quarter = 1;        break;    case 'last':        $quarter = 4;        break;    default:        $quarter = (!is_int($quarter) || $quarter < 1 || $quarter > 4) ? $current_quarter : $quarter;        break;    }    if ( $quarter === 'this' ) {        $quarter = ceil((new DateTime)->format('n') / 3);    }    $start = new DateTime($year.'-'.(3*$quarter-2).'-1 00:00:00');    $end = new DateTime($year.'-'.(3*$quarter).'-'.($quarter == 1 || $quarter == 4 ? 31 : 30) .' 23:59:59');    return array(        'start' => $format ? $start->format($format) : $start,        'end' => $format ? $end->format($format) : $end,    );}

I develop this function to deal with quarter in any way: relative (this, previous, first, last) and fixed.

Examples:

get_dates_of_quarter();//return current quarter start and end datesget_dates_of_quarter(2);//return 2nd quarter start and end dates of current yearget_dates_of_quarter('first', 2010, 'Y-m-d');//return start='2010-01-01' and end='2014-03-31'get_dates_of_quarter('current', 2009, 'Y-m-d');//Supposing today is '2014-08-22' (3rd quarter), this will return//3rd quarter but of year 2009.//return start='2009-07-01' and end='2009-09-30'get_dates_of_quarter('previous');//Supposing today is '2014-02-18' (1st quarter), this will return//return start='2013-10-01' and end='2013-12-31'

Waiting this help someone ;)


what about:

$offset = (date('n')%3)-1; // modulo ftw$start = new DateTime("first day of -$offset month midnight");$offset = 3-(date('n')%3); // modulo ftw again$end = new DateTime("last day of +$offset month midnight");


Simple code:

$current_quarter = ceil(date('n') / 3);$first_date = date('Y-m-d', strtotime(date('Y') . '-' . (($current_quarter * 3) - 2) . '-1'));$last_date = date('Y-m-t', strtotime(date('Y') . '-' . (($current_quarter * 3)) . '-1'));