티스토리 뷰

반응형

php로 웹프로그래밍을 하다가 오늘날짜에서 하루전날을 구하는 방법이나, 일주일 후.. 한달 후 오늘 등, 날짜를 이용한 다양한 구현방법이 궁금할때 참고해 보시면 좋을 것 같습니다. 

php라는 언어는 어떤 방식으로 날짜를 다루는지 한번 살펴보자구요.

 

먼저, 기본적으로 어제, 오늘 날짜를 아래처럼 구하는 것은 잘못된 방법임이 정설입니다. 단순한 방법이라고 생각하고 하지만, 이건 오류가 있는 것이지요.

<?
$today = date('Ymd');
$yesterday = $today - 1;
?>
 
현재일자를 구하고, 하루를 단순히 -1로 표현한 결과는 매달 1일이 되었을 때 어제 날짜로 00일을 리턴하는 오류가 발생합니다. 물론 1일이 아닌 경우는 다 맞겠죠? 하지만 치명적인 오류가 될 수 있는 것입니다.

예를들어 ) 2021-12-01의 어제를 2021-12-00으로 표시한다는 말입니다.

 
이를 보완하고 우리가 원하는 정확한 날짜를 구하려면 아래와 같이 해야 합니다.

date('Y-m-d', $_SERVER['REQUEST_TIME']-86400);

서버에서 시간을 불러오는 부분 '$_SERVER['REQUEST_TIME']'을 통해 하루의 초인 864000초를 빼주면 정확히 전날을 볼 수 있는 것입니다.

또 다른 방법이 있지요. 프로그램에서는 한가지 방법만 존재하는 것이 아니니까요.

$day = "2021-12-08";    // 오늘의 날짜를 넣고 실제 실행해 보면

$beforeDay = date("Y-m-d", strtotime($day." -1 day"));

이렇게 실행해도 전날인 "2021-12-07"를 문자열로 구할 수 있습니다.

위의 코드를 뜯어보면, 

strtotime 함수는 날짜 형식의 문자열을 타임스탬프 즉, 밀리세컨드 형식의 데이터로 변환합니다. 이 때 날짜 뒤에 "+1 day", "+1 month", "+1 year" 등의 문자열을 붙여서 날짜를 계산할 수 있습니다. 사용해 보면 편리한 기능입니다.
  

date는 타임스탬프 형식의 날짜를 원하는 포맷으로 변환합니다. 두번째 인자가 주어지지 않으면 오늘 날짜가 됩니다.

포맷문자열 "Y" 는 네자리 년도, "m" 은 두자리 월, "d" 는 두자리 일 입니다. (대소문자에 주의해 주세요)

이런식이라면, 아래와 같이 여러가지로 응용해 볼 수 있겠네요.

<? 
date("Y-m-d H:i:s", strtotime("-1 day")); // 어제 
date("Y-m-d H:i:s", strtotime("now")); // 현재 
date("Y-m-d H:i:s", strtotime("+1 day")); // 내일 
date("Y-m-d H:i:s", strtotime("+1 week")); // 일주일 후 
date("Y-m-d H:i:s", strtotime("-1 month")); // 한달 전 
date("Y-m-d H:i:s", strtotime("+1 month")); // 다음달 
date("Y-m-d H:i:s", strtotime("+1 week 2 days 3 hours 4 seconds")); // 1주 2일 3시간 4초 후 
date("Y-m-d H:i:s", strtotime("next Thursday")); // 다음주 목요일 
date("Y-m-d H:i:s", strtotime("last Monday")); // 지난 월요일 
date("Y-m-d H:i:s", strtotime("10 September 2013")); // 2013년 9월 10일 
?>


이렇게 응용하다보면 우리가 생각한 날짜를 php로 구현가능하지 않을까요?

또 다른 예시를 통해서도 php 하루전날, 하루 후, 한달 전, 다음달 등등.... 여러가지 형태로 우리가 코딩에서 원하는 날짜를 표현가능합니다. 

<?

//PHP 날짜 및 시간 계산 (하루, 일주일, 한달, 다음달,1년 )

$time = time();

echo date("Y-m-d",strtotime("-1 day", $time))." 하루 전(어제)";

echo date("Y-m-d",strtotime("-1 day", $time))." 하루 전(어제)";

echo date("Y-m-d",strtotime("now", $time))." 현재";

echo date("Y-m-d",strtotime("+1 day", $time))." 하루 후(내일)";

echo date("Y-m-d",strtotime("+1 week", $time))." 일주일 후";

echo date("Y-m-d",strtotime("-1 month", $time))." 한달 전";

echo date("Y-m-d",strtotime("+1 month", $time))." 다음달";

echo date("Y-m-d",strtotime("+6 month", $time))." 6달후";

echo date("Y-m-d",strtotime("+12 month", $time))." 1년후";

echo date("Y-m-d",strtotime("next Thursday", $time))." 다음주 목요일";

echo date("Y-m-d",strtotime("last Monday", $time))." 지난 월요일";

echo date("Y-m-d",strtotime("10 September 2000", $time))." 2000년 9월 10일 ";

echo strtotime("+5 minutes"); " 현재 시간보다 5분 후";

?>

 

PHP 언어로 표현하는 날짜에 대해서 여러 탐험이 되셨길 기대합니다.

 

마지막으로 오늘 코딩을 위한 소스를 본 PHP 언어에 대한 이야기입니다.

PHP 언어는 간단히 요약하면 "웹의, 웹에 의한, 웹만을 위한 프로그래밍 언어"입니다.
  

PHP는 Php Hypertext Preprocessor의 약자로, 서버 측에서 실행되는 프로그래밍 언어입니다. 1994년에 라스무스 러도프(Rasmus Lerdorf)라는 사람이 고안했는데요. 처음 개발되었을 때, PHP는 Personal Home Page Tools의 약자였다고 합니다. 이름에서도 알 수 있듯이, 개인이 홈페이지를 좀 더 쉽게 만들기 위해 개발한 실용적이고 가벼운 툴이었다고 하네요. 결국 대형프로젝트에는 성격이 맞지 않는다는 말이기도 합니다.

PHP에 대한 한 마디를 보면 아시겠지만, PHP는 웹 개발에 특화된 언어입니다. 또한 지금도 웹 개발을 위해서 발전하고 있지요. C언어 기반이기 때문에 C언어에 익숙한 개발자들이 쉽게 접근할 수 있습니다.
'제가 생각하는 PHP언어는 HTML의 단점을 보완하고 자동화하기 위한 서버쪽 언어로 생각하고 사용하고 있어요. 주요 동작은 당연히 javascript로 거의 구현을 하지요.' 하지만 html의 반복문이라던지 사용할 여러가지 좋은 장점이 많습니다.  

웹 개발만에 특화된 PHP 단점은 웹개발이 아닌 곳에는 거의 쓸곳이 별로 없다는 것이겠죠?


2020년 1월 기준 전세계 프로그램 사용순위를 보면, PHP는 아직 10위안에는 들어있네요. 8위.... 계속 낮아지고는 있습니다. 좋은 언어들이 새로 탄생하기도 하지만, 웹이란 환경에서만 국한적으로 사용하는 언어의 한계, 확장성에는 문제가 있어보이죠. 이처럼 랭킹 TOP10 안에 들어갈 정도로 많이 쓰이고 있는 언어입니다.

그럼에도 불구하고, 왜 PHP가 사랑 받는 이유는 뭘까요?

먼저 PHP는 오픈 소스이기 때문에 무료입니다. 돈을 받지 않는 언어라는 것.... 젊은이들에게 매력적인 내용이죠. 누구든 원하면 따로 금액을 지불하지 않아도 쉽게 다운받아서 이용할 수가 있지요. PHP와 자주 비교되는 언어 중에 ‘ASP’가 있는데요. 하지만 ASP는 윈도우 운영체제에서만 이용 가능하지만, PHP는 윈도우나 리눅스 계열의 대부분의 운영체제에서 이용할 수 있다는 장점이 있습니다. 또한 빠른 생산성을 자랑합니다. 개발자의 입장에서 배우기 쉽고 간단하기 때문에 개발 기간이 적게 소요되는 것이지요. 또한 운영 비용도 저렴합니다. 보통 우리나라 유명한 CAFE24를 비롯한 웹호스팅을 하는 업체들은 기본적으로 PHP가 탑재되어 있는 구현환경을 제공합니다. 그렇기 때문에 사이트제작시 매우 빠르게 세팅을 할 수 있고요, 그렇기 때문에 간단한 웹사이트를 만들 때, 최대의 효율을 발휘할 수 있습니다. 또한 쉽게 플러그인이나 기능을 붙일 수가 있지요. 블로그나 회사 소개 사이트, 간단한 쇼핑몰 등은 PHP로 만들면 효율적으로 만들 수 있습니다.

하지만, 만들고자 하는 웹사이트의 규모가 커지면 어떨까요?  

'PHP 단점'으로 인해 떨어지는 점유율은 너무도 당연한 것입니다.  

‘PHP 단점’에 대해서는 위에서 언급한 내용말고도 찾아보면 여러가지가 아니, 많이 있습니다. 그래서 인기가 떨어지는 이유일 것입니다. 코딩하는 사람들에게 더 좋은 환경을 제공하기에 한계가 있는 언어임은 분명합니다. 
'확장성' 문제 말입니다.

‘PHP 단점’은 ‘웹 개발’에 특화되어 있는 언어라고 먼저 소개해드렸지요. PHP 단점 중 큰 것은 오직 ‘웹 개발’을 위해서만 쓸 수 있다는 점입니다. 또한 초반에 이 언어가 만들어진 목적 자체가 개인이 홈페이지를 좀 더 쉽게 만들기 위해 개발된 언어이기 때문에, 간단한 사이트 제작에 최적화되어 있습니다. 따라서 방대한 웹사이트를 만들 경우, 개발자의 입장에서 체계적이지 않기 때문에 구조 잡기가 매우 힘들다고 합니다. 그렇기 때문에 당연히 웹사이트 구축하고 난 후에 관리가 힘들어질 수 밖에 없겠지요. 따라서 복잡한 사이트를 만드는 데에는 효율적이지 않은 것이 ‘PHP 단점’입니다. 예를 들면, 옥션과 같은 큰 규모의 전자 상거래 사이트를 PHP로 만들려면, 수 천명의 개발자가 필요하고, 그 수 천명의 개발자의 뇌가 모두 동기화되어야 한다고 합니다.

이처럼 유저 형태가 다양하다거나 복잡한 기능을 많이 갖춰야 하는 사이트를 구축하고자 할 때에는 PHP가 적합하지 않은 것이지요. 또한 다른 프로그래머들이 쉽게 접근할 수 있기 때문에 보안 문제가 발생할 수 있는 것도 PHP 단점 중에 하나입니다.

 

PHP 기반으로 만들어진 사이트들
워드프레스(WordPress)나 줌라(Joomla), 드루팔(Drupal)과 같은 설치형 웹 애플리케이션은 PHP를 기반으로 만들어진 것이 대부분입니다. 위시켓 블로그 역시 워드프레스를 이용하여 만들었기 때문에 PHP 기반의 사이트이지요. 또한 ‘위키피디아’ 역시 PHP로 만들어진 사이트입니다.
 

 

PHP 코딩을 통해 그래도 우리가 실생활에 사용하는 멋진 프로그램을 만들 수 있고, 언제나 구글링을 통해 멋진 코드들도 우리가 무료로 확보할 수 있다면 충분히 매력을 뿜뿜하는 언어라고 생각합니다.

웹에서만 이라도 멋지게 돌아가는 프로그램, 그래도 멋집니다.

반응형
댓글