[PHP 7] 만년 달력 만들기 / time(), unix timestamp

김와앙·2023년 10월 31일

PHP 7

목록 보기
14/20

모양 잡아주기

<style>
  .item{width: 14%; height: 100px; float: left; border: 1px solid #aaa;}
  </style>
  • width : 14% 로 설정해주었다. 페이지를 움직여도 사이즈가 일정비율을 유지하며 유동적으로 늘어나거나 줄어든다.

달력 빈칸 조절하기

  • 어느 달은 월요일부터 시작, 어느 달은 일요일부터 시작.
    -> 어떻게 처리할 것인가

: 달이 일요일부터 시작하는 것을 제외하고는, 시작요일만큼 앞에 빈 공란이 있어야함.

=> 일단 컴터는 요일을 알아먹을 수 없으니.. 요일을 숫자로 변경해주는 함수를 찾아본다.

: php 공식문서 ,date () 중에 "w" : 한주의 각 요일을 숫자로 대신해주는 객체

=> 이걸 사용하면 되겠다.

그전에,


✏️ time 함수 & unix timestamp 알아보기

  • time() 함수는 현재 unix stamp 값을 반환하는 함수다.

1. 근데 unix timestamp 가 뭔데?
=> 유닉스가 만들어진 1970년 1월 1일 00:00:00 부터 지금까지 흐른 시간을 ( 초단위 ) 정수형태로 출력해주는 것.

2. yyyy-mm-dd 형태 대신에 이걸 사용하는 이유는?
=> (1) 전세계 컴퓨터 시스템에서 일관되게 사용가능함.
(2) 정수형이기 때문에 시간간격을 계산하기 매우 편리하다.
(3) 저장공간을 절약할 수 있다.


   <?php
        $a = time();
        $b = date("w", $a);
        echo $b;
    ?>

=> 아무튼 그러해서 time() 으로 현재 경과 시간, 그리고 그걸 사용해서 요일을 숫자로 출력하는 간단한 출력문을 써보면

오늘 기준으로 (화요일임)

0 : 일요일
1 : 월요일
2 : 화요일

.
.
이렇게 되기 때문에 '2' 가 출력될 것이다.

이렇게 -

그러면 이제 할일은,
(1)출력된 수만큼 blank 를 주기
(2)unix 타임 스탬프(경과시간) 말고 내가 원하는 년도와 달의 달력으로 출력시키기

이다.


(1) blank 주기
<?php
for ($i=0; $i<$blank; $i++){ ?>
	
    <div class="item">
    </div>
	
<?php } ?>

$blank 는

$blank = date("w", $ym);

으로 지정해주면 된다
출력된 숫자 만큼 빈 공란이 매달 1일 앞에 생기게 된다.

지정한 $ym 은 기본값(사용자가 아무것도 지정하지 않았을 경우)
혹은 사용자가 지정한 년도와 달의 값이 들어가게 된다.


(2) 원하는 year & month 값 지정하기

변수 $ym 에다가 넣어주면 된다.

앗, 그리고 아까는 unix timestamp 정수형이라 변환이 필요 없었는데
지금은 연도값과 month 값이 문자열 시간값 형태 (yyyy-mm)로 들어가기 때문에
정수형으로 변환이 추가적으로 필요하게 된다. 이때는

strtotime()

=> string 시간값을 time 형태,즉 정수형으로 바꿔주는 함수인 strtotime() 을 사용한다.


추가)

매달마다 다른 일수 처리하기!

date("t",  );

이거 사용하면 된다.

이걸 반복문안의 조건문에다가 활용하여 사용해주면 된다.


month & year GET 방식으로 받기

 <?php
        
        $year = $_GET['year']; //GET 방식 (url)
        $month = $_GET['month'];

        if(!$year) $year = date("Y");
        if(!$month) $month = date("m"); 
        //사용자 입력이 없을 경우 디폴트 설정
       
       
        $tm = $year ."-". $month ."-01";    
        $a = strtotime($tm); //변환
        $blank = date("w", $a);

    for( $i = 0; $i < $blank ; $i++ ){ ?>
            <div class="item">
            </div>
    
    <?php } ?>

select 로 선택해서 나타내기

year, month 안넘어감 값이. (ㅅㅂ.) 해결요망

profile
greedy college ssu.tudent 👩‍🎓

0개의 댓글