테이블로 출력

PHP
<?php
/*

달력 계산기

25-02-15 작성

작성자: 동백

*/

    // 파스텔 톤의 스타일 적용
    echo "<style>
    body {
        background-color: #f9f9f9;
        font-family: Arial, sans-serif;
        text-align: center;
        color: #cc6666;
    }
    .container {
        width: 60%;
        margin: 50px auto;
        padding: 20px;
        background-color: #ffe6e6;
        border-radius: 10px;
        box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
    }
    h1 {
        color: #ffb3b3;
    }
    table {
        width: 100%;
        border-collapse: collapse;
        margin-top: 20px;
        background-color: #fff5f5;
        border-radius: 10px;
        overflow: hidden;
    }
    th, td {
        border: 1px solid #ffcccc;
        padding: 10px;
        text-align: center;
    }
    th {
        background-color: #ffb3b3;
        color: white;
    }
    td {
        background-color: #fff0f0;
    }
    </style>";

// 달력 함수 선언(입력 변수: 날짜)
function Calender($date) {
    
    $year = date("Y", strtotime($date)); // 문자열 함수를 날짜 형식으로 변환 후 4자리의 연도로 변수에 저장
    $month = date("m", strtotime($date)); // 문자열 함수를 날짜 형식으로 변환 후 2자리(01 ~ 12)로 변수에 저장
    
    $first_day = date("Y-m-01", strtotime($date)); // 해당 연월의 첫 날을 변수에 저장
    $last_day = date("Y-m-t", strtotime($first_day)); // 해당 월의 총 일수를 뽑아 마지막 날짜로 저장
    $last = date("d", strtotime($last_day)); // 마지막 일자를 두자리로 추출

    $week_number = date("w", strtotime($date)); // 일 ~ 월 순으로 0 ~ 6 중 선택해서 저장
    $counter = 1; // 일수 카운터
    $trcounter = 1; // 행수 카운터

    $index = ['', '', '', '', '', '', '']; // 요일 배열
    echo "<table style='display: inline-table; border-collapse: collapse;'>";
        echo "<tr>";
            echo "<th colspan='7' style='padding: 5px; border: 1px solid #ddd; text-align: center;'>$year$month 월</th>"; // 연, 월 표시 후 셀 병합(colspan)
        echo "</tr>";
        echo "<tr>";
            for($i=0; $i<7; $i++) {
                echo "<th style='padding: 5px; border: 1px solid #ddd;'>$index[$i]</th>"; // 배열에 저장된 요일을 순서대로 출력
            }
        echo "</tr>";

        // 각 월의 첫 날이 출력되기 전 공백을 표현(ex. 첫 날의 요일이 4일 경우 0~4의 5개 공백 배치)
        echo "<tr>";
            for($i=0; $i<$week_number; $i++) {
                echo "<td style='padding: 5px; border: 1px solid #ddd;'></td>";
                $counter = $counter + 1;
            }
            
            // 1일부터 마지막 날($last) 까지 for 구문으로 일자($i)를 출력
            for($i=1; $i<=$last; $i++) {
                echo "<td style='padding: 5px; border: 1px solid #ddd;'>";
                echo $i; 
                echo "</td>";
                // 한 주마다 기존 행을 닫고 새로운 행을 개행
                if($counter == 7) {
                    $trcounter = $trcounter +1; // 행 수를 세서 추후 레이아웃 정렬에 활용
                    echo "</tr><tr>";
                    $counter = 0; 
                }
                $counter = $counter + 1;
            }

            // 마지막 날 출력 이후의 공백을 표현
            if($counter > 1){
                for ($i=$counter; $i<8; $i++) {
                    echo "<td style='padding: 5px; border: 1px solid #ddd;'>";
                    echo "</td>";
                }
            }
    echo "</tr>";
    // 가지런한 배치를 위해 행 수와 일 수 카운터에 따라 추가 개행 여부를 결정 
    if($trcounter == 5 || $counter == 1) {
        echo "<tr>";
        echo "<th colspan='7' style='padding: 5px; border: 1px solid #ddd; text-align: center;'>&nbsp</th>";
        
        echo "</tr>";
    }
    echo "</table>";

return;
}

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    echo "<h1>달력: 기준 일자로부터 1년</h1>";
    $date = strip_tags($_POST['date']); // html 문서에서 날짜 입력 받기
        echo "<table>";
        echo "<tr>";

        // 입력 연월로부터 총 12개월을 출력
        for($i=0; $i<12; $i++) {
            echo "<td>";
            Calender($date);
            $date = date("Y-m-d", strtotime("+1 month", strtotime($date)));
            echo "</td>";
            // 6개의 월을 출력 후 전체 개행 (2x6의 레이아웃)
            if ($i == 5) {
                echo "</tr><tr>";
            }
        }
        echo "</tr>";
        echo "</table>";
    }
?>

For You

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다