Web/PHP

두 날짜 사이의 월별, 일별 통계 구하기

projin 2021. 3. 30. 08:48

 

<?php

// 두 날짜 사이의 일 구하기

function getDateStartToLast($startDate, $lastDate) {
    $regex = "/^\d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[0-1])$/";
    
    if(!(preg_match($regex, $startDate) && preg_match($regex, $lastDate))) return "Not Date Format";
    
    $period = new DatePeriod( new DateTime($startDate), new DateInterval('P1D'), new DateTime($lastDate." +1 day"));
    
    foreach ($period as $date) $dates[] = $date->format("Y-m-d");
    
    return $dates;
}

// 두 날짜 사이의 월 구하기
function getMonthStartToLast($startDate, $lastDate) {

    $regex = "/^\d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[0-1])$/";
    
    if(!(preg_match($regex, $startDate) && preg_match($regex, $lastDate))) return "Not Date Format";
   
    $period = new DatePeriod( new DateTime($startDate), new DateInterval('P1M'), new DateTime($lastDate." +1 month"));

	foreach ($period as $date) {
		if($lastDate > $date->format("Y-m") ){
        
			$dates[] = $date->format("Y-m");
            
		}
	}
    
    return $dates;
}


$start_date = "2020-12-01";

$end_date = "2020-12-31";

// 두 날짜 사이의 월 구하기
$work_month = getMonthStartToLast($start_date, $end_date);

$work_day = getDateStartToLast($start_date, $end_date);
?>

 

두 날짜 사이의 모든 날짜를 구한 다음 해당 날짜의 통계를 구하면 해당 기간에 통계 결과가 없어도 데이터는 '0'으로 나타낼 수 있음

 

//일별 통계

<?php

foreach ($work_day as $k=>$v) {

    $date = explode("-", $v);

    //해당 날짜의 합계
    
    $sql = "select ifnull(sum(it_ea),0) as sum from tablename WHERE date_time like '{$v}%'";
    
    $row = sql_fetch($sql);


    $year = $date[0];
    
    $month = $date[1];
    
    $day = $date[2];
    
    $sum = $row['sum'];

}
?>