테이블로 출력
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;'> </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>";
}
?>