function __getCalendar($from, $to, $discontinuity) { $from_obj = new CDatetime($from); $to_obj = new CDatetime($to); $result = array(); // $month_start_flag = false; // // $month_end_flag = ($from_obj->getYear() < $to_obj->getYear()); $day_start_flag = false; // for ($year = $from_obj->getYear(); $year <= $to_obj->getYear(); $year++) { if ($discontinuity == DATETIME_PERIOD_DISCONTINUITY_YEAR) { $result[] = array('datetime_year' => $year); } else { // - $from_obj->getMonth(), . . // , 1 $month_start_num = $month_start_flag ? 1 : $from_obj->getMonth(); // , // 12 $month_end_num = $year < $to_obj->getYear() ? 12 : $to_obj->getMonth(); // for ($month = $month_start_num; $month <= $month_end_num; $month++) { if ($discontinuity == DATETIME_PERIOD_DISCONTINUITY_MONTH) { $result[] = array('datetime_year' => $year, 'datetime_month' => $month); } else { // : , , // 1 $day_start_num = $day_start_flag ? 1 : $from_obj->getMonthDay(); // : , // , $day_end_num = ($year <= $to_obj->getYear() and $month < $month_end_num) ? date("t", mktime(0, 0, 1, $month, 1, $year)) : $to_obj->getMonthDay(); for ($day = $day_start_num; $day <= $day_end_num; $day++) { $result[] = array('datetime_year' => $year, 'datetime_month' => $month, 'datetime_day' => $day); } $day_start_flag = true; } } // - // 1 $month_start_flag = true; } } return $result; }
function getLastYears($number, $include_current = CDATETIMEPERIODS_NOT_INCLUDING_CURRENT_ONE) { list($offset, $length) = $this->__getOffsetAndLength($number, $include_current); list($from_timestamp, $to_timestamp) = $this->getPeriod($offset * 12, CDATETIME_MONTH, $length * 12, CDATETIME_MONTH); $obj_from = new CDatetime($from_timestamp); $from_year = $obj_from->getYear(); $from = mktime(0, 0, 0, 1, 1, $from_year); $obj_to = new CDatetime($to_timestamp); $to_year = $obj_to->getYear(); $to = mktime(23, 59, 59, 12, 31, $to_year); return array($from, $to); }