관리 메뉴

웹개발자의 기지개

[PHP] 날짜 관련 내용 정리 본문

PHP

[PHP] 날짜 관련 내용 정리

http://portfolio.wonpaper.net 2021. 11. 11. 22:15

PHP 와 Mysql 등으로 코딩을 할때 날짜부분을 처리할때,

보통은 간단히 처리하려고 mysql 의 칼럼을 date 형태로 2021-11-22 04:23:22 이런식으로 들어가도록 insert 처리를 할 수 있는데, 이는 나중에 날짜구간으로 구분하여 Select 문으로 땡겨올때 조금 쉽지 않는 방식으로 처리를 해야한다.

 

그래서, 필자는 mysql 상으로는 int형으로 그 날짜에 대하여 Timestamp 값을 넣어서, reg_date >= 1634401376 이런식으로 손쉽게 날짜 구간 검색이 편리하도록 코딩한다.

 

아래의 간단한 예제를 참고하여 날짜 관련 내용을 DB에 넣고 불러올때 참고하면 좋을듯하다.

 

Timestamp 값을 만드는 함수로 mktime() 과 strtotime() 를 유용하게 사용할 수 있다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
 
echo date('Y-m-d H:i'1634401376);
 
echo "<br><br>";
 
$time = mktime(2,47,0,10,16,2021);
 
echo $time;
 
echo "<br><br>";
 
echo date('Y-m-d H:i'$time);
?>
cs

 

Timestamp 값형태로 만약 오늘날짜까지의 쿼리를 불러온다고 한다면,

 

SELECT UNIX_TIMESTAMP('2022-01-26') 

1643122800

 

AAA 테이블에 날짜칼럼값이 2022-01-26 이나 2021-10-26 날짜 형태일때,

 

$time1 = mktime(0,0,0,date('m'),date('d')+1,date('Y'));

Select * from AAA where UNIX_TIMESTAMP('날짜칼럼') < $time1; 

 

 

 

SELECT UNIX_TIMESTAMP('2022-01-26 23:00:00')

1643205600

 

echo strtotime('2022-01-26 01:15:00');

1643127300

 

 

$time = time();
echo date("Y-m-d",strtotime("-1 day", $time))." 하루 전(어제)<br>";
echo date("Y-m-d",strtotime("now", $time))." 현재<br>";
echo date("Y-m-d",strtotime("+1 day", $time))." 하루 후(내일)<br>";
echo date("Y-m-d",strtotime("+1 week", $time))." 일주일 후<br>";
echo date("Y-m-d",strtotime("-1 month", $time))." 한달 전<br>";
echo date("Y-m-d",strtotime("+1 month", $time))." 다음달<br>";
echo date("Y-m-d",strtotime("+6 month", $time))." 6달후<br>";
echo date("Y-m-d",strtotime("+12 month", $time))." 12달후<br>";
echo date("Y-m-d",strtotime("next Thursday", $time))." 다음주 목요일<br>";
echo date("Y-m-d",strtotime("last Monday", $time))." 지난 월요일<br>";
echo date("Y-m-d",strtotime("10 September 2000", $time))." 2000년 9월 10일 <br>";

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?
//  일주일내에 
$reg_date = time();
//echo date('Y-m-d',strtotime("-7 day",$reg_date));
$time = strtotime("-7 day",$reg_date);
 
$query = "select count(*) as cnt from board_qna2 where write_date >= $time";
$aRes1  = mysql_query($query) or die("게시판 2 정보 얻기 실패");
$aRow1  = mysql_fetch_array($aRes1);
if ($aRow1[cnt] > 0) {echo "<i class='xi-new xi-x dec01' style='color:#fff;'></i>";}
 
$query = "select count(*) as cnt from board_qna2 where write_date >= $time";
$aRes2  = mysql_query($query) or die("게시판 3 정보 얻기 실패");
$aRow2  = mysql_fetch_array($aRes2);
if ($aRow1[cnt] > 0) {echo "<i class='xi-new xi-x dec01' style='color:#fff;'></i>";}
 
?>
cs

 

 

 

$d = mktime(0,0,0, date("m"), 1, date("Y")); //이번달 1일
$prev_month = strtotime("-1 month", $d); //한달전
echo date("Y-m-01", $prev_month); //지난달 1일
echo date("Y-m-t", $prev_month); //지난달 말일

 

 

 

참고 : https://skymin2.tistory.com/35

참고 : https://unabated.tistory.com/entry/strtotime

Comments