Recent Posts
Recent Comments
Adsense
Archives
Visitor
Today
Total
관리 메뉴

Annotation

날짜 관련 유틸리티 함수 제작 (유틸제작 1편) 본문

JavaScript

날짜 관련 유틸리티 함수 제작 (유틸제작 1편)

devs 2016. 5. 12. 12:07




날짜 관련 유틸리티 함수 제작 (유틸제작 1편)


포스팅의 제목과 같이 JavaScript 에서 Date 객체를 이용한 함수 제작을 설명드리려고 합니다.


Date 객체 많이들 사용하실텐데 미리 관련 함수를 만들어 놓으면 매우 편하게 사용하실 수 있습니다 :D


어려운 내용은 아니므로 소스코드를 우선 보신뒤 하단에서 간단한 설명을 참고해주시면 될것 같습니다.


바쁘신 분은 소스코드의 주석만 보셔도 됩니다.


(function(){
	
	/**
	 * 현재 년 을 리턴합니다.
	 * @returns
	 */
	Date.prototype.getY = function() {
		var date = new Date();
		return  "" + date.getFullYear();
	};
	
	/**
	 * 현재 년월 을 리턴합니다.
	 * @returns
	 */
	Date.prototype.getYM = function() {
		var date = new Date();
		var month = (date.getMonth() + 1);
		if(Number(month) < 10){ month = "0" + month; }
		return  "" + date.getFullYear() +
				"" + month;
	};
	
	/**
	 * 현재 년월일 을 리턴합니다.
	 * @returns
	 */
	Date.prototype.getYMD = function() {
		var date = new Date();
		var month = (date.getMonth() + 1);
		var day = date.getDate();
		if(Number(month) < 10){ month = "0" + month; }
		if(Number(day) < 10){ day = "0" + day; }
		return  "" + date.getFullYear() +
				"" + month +
				"" + day;
	};
	
	/**
	 * 현재 년월일시 을 리턴합니다.
	 * @returns
	 */
	Date.prototype.getYMDH = function() {
		var date = new Date();
		var month = (date.getMonth() + 1);
		var day = date.getDate();
		var hrs = date.getHours();
		if(Number(month) < 10){ month = "0" + month; }
		if(Number(day) < 10){ day = "0" + day; }
		if(Number(hrs) < 10){ hrs = "0" + hrs; }
		return  "" + date.getFullYear() +
				"" + month +
				"" + day +
				"" + hrs;
	};
	
	/**
	 * 현재 년월일시분 을 리턴합니다.
	 * @returns
	 */
	Date.prototype.getYMDHM = function() {
		var date = new Date();
		var month = (date.getMonth() + 1);
		var day = date.getDate();
		var hrs = date.getHours();
		var min = date.getMinutes();
		if(Number(month) < 10){ month = "0" + month; }
		if(Number(day) < 10){ day = "0" + day; }
		if(Number(hrs) < 10){ hrs = "0" + hrs; }
		if(Number(min) < 10){ min = "0" + min; }
		return  "" + date.getFullYear() +
				"" + month + 
				"" + day +
				"" + hrs +
				"" + min;
	};
	
	/**
	 * 현재 년월일시분초 을 리턴합니다.
	 * @returns
	 */
	Date.prototype.getYMDHMS = function() {
		var date = new Date();
		var month = (date.getMonth() + 1);
		var day = date.getDate();
		var hrs = date.getHours();
		var min = date.getMinutes();
		var sec = date.getSeconds();
		if(Number(month) < 10){ month = "0" + month; }
		if(Number(day) < 10){ day = "0" + day; }
		if(Number(hrs) < 10){ hrs = "0" + hrs; }
		if(Number(min) < 10){ min = "0" + min; }
		if(Number(sec) < 10){ sec = "0" + sec; }
		return  "" + date.getFullYear() +
				"" + month +
				"" + day +
				"" + hrs +
				"" + min +
				"" + sec;
	};
	
	/**
	 * 현재 년월일시분초밀리초 을 리턴합니다.
	 * @returns
	 */
	Date.prototype.getYMDHMS_S = function() {
		var date = new Date();
		var month = (date.getMonth() + 1);
		var day = date.getDate();
		var hrs = date.getHours();
		var min = date.getMinutes();
		var sec = date.getSeconds();
		if(Number(month) < 10){ month = "0" + month; }
		if(Number(day) < 10){ day = "0" + day; }
		if(Number(hrs) < 10){ hrs = "0" + hrs; }
		if(Number(min) < 10){ min = "0" + min; }
		if(Number(sec) < 10){ sec = "0" + sec; }
		return  "" + date.getFullYear() +
				"" + month +
				"" + day +
				"" + hrs +
				"" + min +
				"" + sec +
				"" + date.getMilliseconds();
	};
	
	/**
	 * 월, 일의 포멧을 변경합니다.
	 * 1~9 -> 01~09
	 * @param _Date
	 * @returns {String}
	 */
	Date.prototype.formatYMD = function(_Date) {
		var month = (_Date.getMonth() + 1);
		var day = _Date.getDate();
		if(Number(month) < 10){ month = "0" + month; }
		if(Number(day) < 10){ day = "0" + day; }
		return  "" + _Date.getFullYear() +
				"" + month +
				"" + day;
	};
	
	/**
	 * 주어진 날짜의 차이 일을 구합니다.
	 * @param sday - 시작일
	 * @param eday - 종료일
	 * @returns {number}
	 */
	Date.prototype.formatDiffDays = function(sday, eday) {
		var date1 = new Date(sday.substr(0,4), sday.substr(4,2)-1, sday.substr(6,2));
		var date2 = new Date(eday.substr(0,4), eday.substr(4,2)-1, eday.substr(6,2));
		
		var interval = date2 - date1;
		var day = 1000*60*60*24;
		var month = day*30;
		var year = month*12;
		
		return parseInt(interval/day);
	};
	
	/**
	 * 이전 일을 구합니다.
	 * @param dayPrefix - -일수 (number)
	 * @param format - 포맷팅 여부 (number)
	 * @returns {Date}
	 */
	Date.prototype.getBeforeDate = function(dayPrefix, format) {
		var transDate = new Date();
		var processTime = new Date().getTime() + (parseInt(dayPrefix) * 24 * 60 * 60 * 1000);
		transDate.setTime(processTime);
		if(format){
			return new Date().formatYMD(transDate);
		}else{
			return transDate;
		}
	};
	
})();

보시는 것과 같이 중복코드도 포함되어 있어서 좀 더러워 보이네요 ^^;


제가 말씀드리는 중복 코드라 함은 "년월일시분초밀리초"를 선행으로 구한 뒤,


다른 함수(년, 년월, 년월일 등)에서 substring 으로 자른뒤 리턴해줘도 된다는 것을 뜻합니다.


하지만 다들 복붙 하시잖아요?


저 역시 하나 만든 뒤, 복붙으로 만들었습니다.


참고만 해주시고 재정의 하셔서 사용하시길 권장합니다 :)



어쨋든. 년월일시분초 등을 가져오는 함수는 많이 사용하실텐데


"날짜의 차이", "이전일 구하기" 등과 같이 가끔 사용하게 되는 부분은 아마 그때그때 찾아 보셨을 겁니다.


위에 적어둔 소스코드를 그대로 js 파일에 저장하시고 사용하시면 될것 같습니다.



또한 포맷팅에 대한 함수는 1~9를 01~09 로 변경해주는 것만 존재합니다.


중간에 하이픈이나, 콜론을 넣어주는 함수는 직접 정의해주셔야 합니다.



Date 객체에 prototype 으로 함수를 추가하였기 때문에 사용법은 다음과 같습니다.


new Date().getYMD();
// 20160512 <현재 년월일>

new Date().formatDiffDays("20160510", "20160512");
// 2 <두 날짜의 차이 일>

new Date().getBeforeDate(-10);
// Date {Mon May 02 2016 11:57:49 GMT+0900} <10일전 Date 객체>

new Date().getBeforeDate(-10, true);
// 20160502 <10일전 날짜>


new Date() 키워드를 시작으로 추가한 함수를 호출하시면 됩니다.


슥 복사하셔서 가져가시면 쉽고 간편하게 사용하실 수 있는 것들을 써봤습니다.



도움이 되셨을지 모르겠네요.


다음에는 Ajax Wrapping 주제로 또 한번 포스팅하겠습니다.


감사합니다.





Comments