82 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace backend\modules\reports\models;
 | 
						|
 | 
						|
class Month
 | 
						|
{
 | 
						|
 | 
						|
    public $inactive_begin;
 | 
						|
    public $inactive_end;
 | 
						|
    public $active;
 | 
						|
    public $days;
 | 
						|
 | 
						|
    public function __construct($date = null)
 | 
						|
    {
 | 
						|
        $this->inactive_begin = [];
 | 
						|
        $this->inactive_end = [];
 | 
						|
        if ( !($date and self::is_date($date)) ){
 | 
						|
            $date = date('Y-m-d');
 | 
						|
        }
 | 
						|
        $first_day_of_week = self::get_day_week(self::get_first_day($date));
 | 
						|
        $quantity_days = self::get_days_month($date);
 | 
						|
 | 
						|
        $day = 1;
 | 
						|
 | 
						|
        for (
 | 
						|
            $index = $first_day_of_week;
 | 
						|
            $index < $first_day_of_week + $quantity_days;
 | 
						|
            $index++, $day++
 | 
						|
        ) {
 | 
						|
            $this->active[$index] = $day;
 | 
						|
        }
 | 
						|
 | 
						|
        $prev_month = date('Y-m-d', strtotime(self::get_first_day($date)) - 3600 * 37);
 | 
						|
 | 
						|
        $day = self::get_days_month($prev_month);
 | 
						|
 | 
						|
        for ($index = $first_day_of_week - 1; $index >= 1; $index--, $day--) {
 | 
						|
            $this->inactive_begin[$index] = $day;
 | 
						|
        }
 | 
						|
        $day = 1;
 | 
						|
        $index_end = (in_array($first_day_of_week, [6,7])?42:35);
 | 
						|
        for ($index = $quantity_days + $first_day_of_week; $index <=$index_end; $index++, $day++) {
 | 
						|
            $this->inactive_end[$index] = $day;
 | 
						|
        }
 | 
						|
 | 
						|
        $this->days = array_merge($this->inactive_end, $this->inactive_begin, $this->active);
 | 
						|
 | 
						|
    }
 | 
						|
 | 
						|
    public static function next_day($date, $number)
 | 
						|
    {
 | 
						|
        return date('Y-m-d', strtotime($date) + 3600 * 24 * $number);
 | 
						|
    }
 | 
						|
 | 
						|
    public static function get_first_day($date)
 | 
						|
    {
 | 
						|
        return date('Y-m-01', strtotime($date));
 | 
						|
    }
 | 
						|
 | 
						|
    public static function get_day_week($date)
 | 
						|
    {
 | 
						|
        $day = date('w', strtotime(date($date)));
 | 
						|
        if($day==0)
 | 
						|
            return 7;
 | 
						|
        return $day;
 | 
						|
    }
 | 
						|
 | 
						|
    public static function is_date($date)
 | 
						|
    {
 | 
						|
        $date = date_parse($date);
 | 
						|
        if ($date or checkdate($date['month'], $date['day'], $date['year']))
 | 
						|
            return true;
 | 
						|
        return false;
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
    public static function get_days_month($date)
 | 
						|
    {
 | 
						|
        return date("t", strtotime($date));
 | 
						|
    }
 | 
						|
 | 
						|
} |