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));
|
|
}
|
|
|
|
} |