/*========================================================
js_date
--------------------------------=-------
Date °ü·Ã ÇÔ¼ö,ÇÁ·ÎÅäÅ¸ÀÔ ¸ðÀ½

»ç¿ë½Ã "°ø´ë¿©ÀÚ´Â ¿¹»Ú´Ù"¸¦ ³ªÅ¸³»¼Å¾ßÇÕ´Ï´Ù.

¸¸µç³¯ : 2007-08-13
¼öÁ¤ÀÏ : 2008-02-25
¸¸µçÀÌ : mins01,mins,°ø´ë¿©ÀÚ
È¨ÆäÀÌÁö : http://www.mins01.com 
NateOn&MSN : mins01(at)lycos.co.kr
========================================================*/




/*======================================================
date(str,time)
date([Ç¥ÇöÇü½Ä],[´ë»ó½Ã°£])
[´ë»ó½Ã°£]: ÁöÁ¤¾ÈÇÏ¸é Date¿¡ ÁöÁ¤µÈ ½Ã°£(ms)
PHPÀÇ date()¿Í °ÅÀÇ °°Àº ÇÔ¼ö


format ¹®ÀÚ ¼³¸í ¹ÝÈ¯°ª ¿¹ 
a : ¿ÀÀü°ú ¿ÀÈÄ, ¼Ò¹®ÀÚ am, pm 
A : ¿ÀÀü°ú ¿ÀÈÄ, ´ë¹®ÀÚ AM, PM 
B : ½º¿ÓÄ¡ ÀÎÅÍ³Ý ½Ã°£ 000ºÎÅÍ 999  //Áö¿ø¾ÈÇÔ
c : ISO 8601 ³¯Â¥ (PHP 5¿¡¼­ Ãß°¡) 2004-02-12T15:19:21+00:00 //Áö¿ø¾ÈÇÔ
d : ÀÏ, ¾Õ¿¡ 0ÀÌ ºÙ´Â 2ÀÚ¸® 01ºÎÅÍ 31 
D : ¿äÀÏ, 3±ÛÀÚ ¹®ÀÚ MonºÎÅÍ Sun 
F : ¿ù, January, March µîÀÇ ¿ÏÀüÇÑ ¹®ÀÚ Ç¥Çö JanuaryºÎÅÍ December 
g : ½Ã, 0ÀÌ ºÙÁö ¾Ê´Â 12½Ã°£ Çü½Ä 1ºÎÅÍ 12 
G : ½Ã, 0ÀÌ ºÙÁö ¾Ê´Â 24½Ã°£ Çü½Ä 0ºÎÅÍ 23 
h : ½Ã, 0ÀÌ ºÙ´Â 12½Ã°£ Çü½Ä 01ºÎÅÍ 12 
H : ½Ã, 0ÀÌ ºÙ´Â 24½Ã°£ Çü½Ä 00ºÎÅÍ 23 
i : ºÐ, 0ÀÌ ºÙ´Â Çü½Ä 00ºÎÅÍ 59 
I : (´ë¹®ÀÚ i) ÀÏ±¤ Àý¾à ½Ã°£ ¿©ºÎ ÀÏ±¤ Àý¾à ½Ã°£ÀÌ¸é 1, ¾Æ´Ï¸é 0 //Áö¿ø¾ÈÇÔ
j : ÀÏ, 0ÀÌ ºÙÁö ¾Ê´Â Çü½Ä 1ºÎÅÍ 31 
l : (¼Ò¹®ÀÚ 'L') ¿äÀÏ, ¿ÏÀüÇÑ ¹®ÀÚ Ç¥Çö SundayºÎÅÍ Saturday 
L : À±³âÀÎÁö ¿©ºÎ À±³âÀÌ¸é 1, ¾Æ´Ï¸é 0 
m : ¿ù, ¼ýÀÚ Ç¥Çö, 0ÀÌ ºÙ´Â Çü½Ä 01ºÎÅÍ 12 
M : ¿ù, ÂªÀº ¹®ÀÚ Ç¥Çö, 3¹®ÀÚ JanºÎÅÍ Dec 
n : ¿ù, ¼ýÀÚ Ç¥Çö, 0ÀÌ ºÙÁö ¾Ê´Â Çü½Ä 1ºÎÅÍ 12 
O : ±×¸®´ÏÄ¡ ½Ã°£(GMT)°úÀÇ Â÷ÀÌ ¿¹: +0200 
r : RFC 2822 Çü½Ä ³¯Â¥ ¿¹: Thu, 21 Dec 2000 16:01:07 +0200 
s : ÃÊ, 0ÀÌ ºÙ´Â Çü½Ä 00 ºÎÅÍ 59 
S : ÀÏ Ç¥ÇöÀ» À§ÇÑ ¿µ¾î ¼­¼ö Á¢¹Ì¾î, 2¹®ÀÚ st, nd, rd³ª th. j¿Í Àß ÀÛµ¿ÇÕ´Ï´Ù.  
t : ÁÖ¾îÁø ¿ùÀÇ ÀÏ¼ö 28ºÎÅÍ 31 
T : ÀÌ ±â°èÀÇ Ç¥ÁØ ½Ã°£´ë ¼³Á¤ ¿¹: EST, MDT ... //Áö¿ø¾ÈÇÔ
U : À¯´Ð½º Epoch(January 1 1970 00:00:00 GMT)·ÎºÎÅÍÀÇ ÃÊ time() Âü°í 
w : ¿äÀÏ, ¼ýÀÚÇü 0(ÀÏ¿äÀÏ)ºÎÅÍ 6(Åä¿äÀÏ) 
W : ISO-8601 ¿¬µµÀÇ ÁÖÂ÷, ÁÖ´Â ¿ù¿äÀÏ¿¡ ½ÃÀÛ (PHP 4.1.0¿¡¼­ Ãß°¡) ¿¹: 42 (¿¬µµÀÇ 42¹øÂ° ÁÖ) 
Y : ¿¬µµ, 4 ÀÚ¸®¼ö Ç¥Çö ¿¹: 1999, 2003 
y : ¿¬µµ, 2 ÀÚ¸®¼ö Ç¥Çö ¿¹: 99, 03 
z : ¿¬µµÀÇ ÀÏÂ÷ (0ºÎÅÍ ½ÃÀÛ) 0ºÎÅÍ 365 
Z : Ç¥ÁØ ½Ã°£´ëÀÇ ¿ÀÇÁ¼Â ÃÊ. UTC·ÎºÎÅÍ ¼­ÂÊÀÇ ¿ÀÇÁ¼ÂÀº Ç×»ó À½¼öÀÌ°í, UTC·ÎºÎÅÍ µ¿ÂÊÀÇ ¿ÀÇÁ¼ÂÀº Ç×»ó ¾ç¼ö. -43200ºÎÅÍ 43200 


»ç¿ë¿¹ 
var t = new Date(); 
alert(t.date('Y-m-d H:i:s')); 
alert(t.date('Y-m-d H:i:s',1111111111)); 


========================================================*/
function date(str,time){
	if(time!=null)	
	var t = (time!=null)?new Date(time):new Date();
	return t.date(str);
}
Date.prototype.date = function(str,time){
	if(time!=null){this.setTime(time);}
	
	var w_arr = Array('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
	var w_arr_l = Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');
//	var w_arr_l = Array('ÀÏ','¿ù','È­','¼ö','¸ñ','±Ý','Åä'); // ¿øÇÏ´Â °ÍÀ¸·Î ¼±ÅÃ»ç¿ë
//	var w_arr_l = Array('ìí','êÅ','ûý','â©','ÙÊ','ÐÝ','÷Ï'); // ¿øÇÏ´Â °ÍÀ¸·Î ¼±ÅÃ»ç¿ë
	var m_arr_l = Array('January','February','March','April','May','June','July','August','September','October','November','December');
	var m_arr = Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec')

	if(!this.date_obj){this.date_obj=new Object();}	
	var date_obj = this.date_obj;
	if(this.date_obj['U']==undefined || this.date_obj['U']!=Math.floor(t/1000)){
		var y = this.getFullYear();
		var m = this.getMonth();
		var d = this.getDate();
		var h = this.getHours();
		var i = this.getMinutes();
		var s = this.getSeconds();
		var w = this.getDay();
		var t = this.getTime();
		var date_y = new Date(y,0,1,0,0,0);
		
		date_obj['a']=h>12?'pm':'am';
		date_obj['A']=h>12?'PM':'AM';
	//	date_obj['B']=//½º¿ÓÄ¡ ÀÎÅÍ³Ý ½Ã°£ 000ºÎÅÍ 999 //Áö¿ø¾ÈÇÔ
	//	date_obj['c']=//¹Ø¿¡¼­ Ã³¸®//ISO 8601 ³¯Â¥ (PHP 5¿¡¼­ Ãß°¡) 2004-02-12T15:19:21+00:00 
		date_obj['d']=d<10?'0'+d:d;
		date_obj['D']=w_arr[w];
		date_obj['F']=m_arr_l[m];
		date_obj['g']=h%12;
		date_obj['G']=h.toString();;
		date_obj['h']=date_obj['g']<10?'0'+date_obj['g']:date_obj['g'];
		date_obj['H']=date_obj['G']<10?'0'+date_obj['G']:date_obj['G'];
		date_obj['i']=i<10?'0'+i:i;
	//	date_obj['I']=; //ÀÏ±¤ Àý¾à ½Ã°£ ¿©ºÎ : Áö¿ø¾ÈÇÔ
		date_obj['j']=d.toString();;
		date_obj['l']=w_arr_l[w]; //¼Ò¹®ÀÚ L
		date_obj['L']=(y%400==0)?1:(y%100==0)?0:(y%4==0)?1:0;	//1 ÀÌ¸é À±³â, ¾Æ´Ï¸é 0
		date_obj['m']=(m+1)<10?'0'+(m+1):(m+1);
		date_obj['M']=m_arr[m];
		date_obj['n']=(m+1);
		var tx = this.getTimezoneOffset()*-1,tx1 = Math.floor(tx/60),tx2 = Math.floor(tx1/60);
		date_obj['O']=(tx<0?'-':'+')+(tx1<10?'0'+tx1:tx1)+(tx2<10?'0'+tx2:tx2); tx=tx1=tx2=null;
		//date_obj['r'] //¹Ø¿¡¼­ Ã³¸®//RFC 2822 Çü½Ä ³¯Â¥ ¿¹: Thu, 21 Dec 2000 16:01:07 +0200 	
		date_obj['s']=s<10?'0'+s:s;
		date_obj['S']=(d==1)?'st':(d==2)?'nd':(d==3)?'rd':'th';
		date_obj['t']=(new Date(y,(m+1),1,0,0,-1)).getDate()
	//	date_obj['T']=; //ÀÌ ±â°èÀÇ Ç¥ÁØ ½Ã°£´ë ¼³Á¤ ¿¹: EST, MDT ...  Áö¿ø¾ÈÇÔ
		date_obj['U']=Math.floor(t/1000);
		date_obj['w']=w.toString();
		var tx = Math.floor((t-date_y.getTime())/86400000);
		date_obj['W']=Math.ceil((tx+date_y.getDay())/7);//ISO-8601 ¿¬µµÀÇ ÁÖÂ÷, ÁÖ´Â ¿ù¿äÀÏ¿¡ ½ÃÀÛ (PHP 4.1.0¿¡¼­ Ãß°¡) ¿¹: 42 (¿¬µµÀÇ 42¹øÂ° ÁÖ) 
		date_obj['Y']=y.toString();;
		date_obj['y']=y.toString().substr(2,2);
		date_obj['z']=tx; tx=null;
		date_obj['Z']=this.getTimezoneOffset()*60;
		date_obj['c']=date_obj['Y']+'-'+date_obj['m']+'-'+date_obj['d']+'T'+date_obj['H']+':'+date_obj['i']+':'+date_obj['s']+date_obj['O'].substr(0,3)+':'+date_obj['O'].substr(3,2)
		date_obj['r']=date_obj['D']+', '+date_obj['d']+' '+date_obj['M']+' '+date_obj['Y']+' '+date_obj['H']+':'+date_obj['i']+':'+date_obj['s']+' '+date_obj['O'];
	}
	var m=str.length;
	var arr = Array(m);
	var t = '';
	for(var i=0;i<m;i++){
		t=str.charAt(i);
		if(date_obj[t]) arr[i] = date_obj[t];
		else arr[i] = t;
	}
	str = arr.join('');
	return str;

}
/*======================================================
str_setTime(str)
str_setTime([¹®ÀÚ¿­·Î Ç¥ÇöµÈ ½Ã°£])
±ÔÄ¢¿¡ ¸Â´Â ¹®ÀÚ¿­À» ½Ã°£À¸·Î ¹Ù²ã¼­ Date¿¡ setTime ½ÃÅ²´Ù.

»ç¿ë¿¹ 
var t = new Date(); 
alert(t.str_setTime('2007-09-24 13:22:32.1234')); //¸®ÅÏ : msÅ¸ÀÓ
alert(t.str_setTime('yyymmmddd')); // ¸®ÅÏ -1
========================================================*/
Date.prototype.str_setTime = function(str){
	//Çü½Ä¿¡ ¸ÂÃç¼­ ´ë»óÀ» ºÎ¼®ÇÏ¿© DateÇüÀ¸·Î ¼³Á¤ÇÑ´Ù
	//===³¯Â¥Çü½Ä
	//1972-09-24     # ISO 8601.
	//72-9-24        # Assume 19xx for 69 through 99,
	//			     # 20xx for 00 through 68.
	//72-09-24       # Leading zeros are ignored.
	//9/24/72        # Common U.S. writing.
	//24 September 1972
	//24 Sept 72     # September has a special abbreviation.
	//24 Sep 72      # Three-letter abbreviations always allowed.
	//Sep 24, 1972
	//24-sep-72
	//24sep72
	//19720924 #ÀÓÀÇÃß°¡
	//720924 #ÀÓÀÇÃß°¡	
	//2007³â01¿ù01ÀÏ  #ÀÓÀÇÃß°¡	
	//=== ½Ã°£Çü½Ä
	//20:02:00.000000
	//20:02
	//8:02pm
	//20:02-0500      # In EST (U.S. Eastern Standard Time). //Áö¿ø¾ÈÇÔ
	var bool_d = true,bool_t = true;
	var arr_d = new Array(null,null,null);//y,m,d
	var arr_t = new Array(null,null,null,null);//H,i,s,ms
	var m_arr = {'january':1,'february':2,'march':3,'april':4,'may':5,'june':6,'july':7,'august':8,'september':9,'october':10,'november':11,'december':12
	,'jan':1,'feb':2,'mar':3,'apr':4,'may':5,'jun':6,'jul':7,'aug':8,'sep':9,'oct':10,'nov':11,'dec':12
	,'sept':9};
	var regexp = null,reg_result =null
	//=== ³¯Â¥ºñ±³
	if(arr_d[0]==null){
		var str2=str.replace(/[^\d]/g,'')
		if(str2.length!=str.length){
		}else if(str2.length==8){
			arr_d[0]=str2.substr(0,4);
			arr_d[1]=str2.substr(4,2);
			arr_d[2]=str2.substr(6,2);
		}else if(str2.length==6){
			arr_d[0]=str2.substr(0,2);
			arr_d[1]=str2.substr(2,2);
			arr_d[2]=str2.substr(4,2);
		}
		str2 = null;
	}	
	if(arr_d[0]==null){
		regexp = new RegExp(/(\d{2,4})(?:-|\.|\/|\s)(\d{1,2})(?:-|\.|\/|\s)(\d{1,2})/);
		reg_result = regexp.exec(str);
		if(reg_result!=null){
			arr_d[0]=reg_result[1];
			arr_d[1]=reg_result[2];
			arr_d[2]=reg_result[3];
		}
	}
	if(arr_d[0]==null){
		regexp = new RegExp(/(\d{1,2})\/(\d{1,2})\/(\d{2,4})/);	reg_result = regexp.exec(str);
		if(reg_result!=null){arr_d[0]=reg_result[3];arr_d[1]=reg_result[1];arr_d[2]=reg_result[2];}
	}
	if(arr_d[0]==null){
		regexp = new RegExp(/(\d{2,4})³â(\d{1,2})¿ù(\d{1,2})ÀÏ/);	reg_result = regexp.exec(str);
		if(reg_result!=null){arr_d[0]=reg_result[1];arr_d[1]=reg_result[2];arr_d[2]=reg_result[3];}
	}		
	if(arr_d[0]==null){
		regexp = new RegExp(/(\d{1,2}) ([a-zA-Z]{3,9}) (\d{2,4})/);	reg_result = regexp.exec(str);
		if(reg_result!=null){arr_d[0]=reg_result[3];arr_d[1]=m_arr[reg_result[2].toLowerCase()];arr_d[2]=reg_result[1];}
	}
	if(arr_d[0]==null){
		regexp = new RegExp(/([a-zA-Z]{3,9}) (\d{1,2}), (\d{2,4})/);	reg_result = regexp.exec(str);
		if(reg_result!=null){arr_d[0]=reg_result[3];arr_d[1]=m_arr[reg_result[1].toLowerCase()];arr_d[2]=reg_result[2];}
	}
	if(arr_d[0]==null){
		regexp = new RegExp(/(\d{1,2})[^\w]?([a-zA-Z]{3,9})[^\w]?(\d{2,4})/);	reg_result = regexp.exec(str);
		if(reg_result!=null){arr_d[0]=reg_result[3];arr_d[1]=m_arr[reg_result[2].toLowerCase()];arr_d[2]=reg_result[1];}
	}
	if(arr_d[0]==null){
		bool_d = false;
	}
//	alert(arr_d);
	if(arr_d[0]!=null){
		arr_d[0]=Number(arr_d[0],10);
		arr_d[1]=Number(arr_d[1],10);
		arr_d[2]=Number(arr_d[2],10);
		if(arr_d[0]<69){arr_d[0]+=2000;}
	}
	//=== ½Ã°£ºñ±³
	if(arr_t[0]==null){ //20:02:00.000000
		regexp = new RegExp(/(\d{1,2}):(\d{1,2}):(\d{1,2})(\.\d{1,6})?/);reg_result = regexp.exec(str);
		if(reg_result!=null){arr_t[0]=reg_result[1];arr_t[1]=reg_result[2];arr_t[2]=reg_result[3];
		arr_t[3]=reg_result[4]!=null?reg_result[4].substr(1):null;
		}
	}
	if(arr_t[0]==null){ //8:02am
		regexp = new RegExp(/(\d{1,2}):(\d{1,2})(am|pm)?/);reg_result = regexp.exec(str);
		if(reg_result!=null){arr_t[0]=reg_result[1];arr_t[1]=reg_result[2];
		if(reg_result[3]=='pm')arr_t[0]=parseInt(arr_t[0],10)+12;
		}
	}		
	if(arr_t[0]==null){ //8:02
		regexp = new RegExp(/(\d{1,2}):(\d{1,2})(:\d{1,2})?/);reg_result = regexp.exec(str);
		if(reg_result!=null){arr_t[0]=reg_result[1];arr_t[1]=reg_result[2];arr_t[2]=reg_result[3].substr(1)}
	}
	if(arr_t[0]==null){
		bool_t = false;
	}	
	if(arr_t[0]!=null){
		arr_t[0]=Number(arr_t[0],10);
		arr_t[1]=Number(arr_t[1],10);	
		arr_t[2]=Number(arr_t[2],10);
		arr_t[3]=Number(arr_t[3],10);	
	}
	if(!(bool_d||bool_t)){
		return -1;
	}else{
		var t = new Date(arr_d[0],(arr_d[1]-1),arr_d[2],arr_t[0],arr_t[1],arr_t[2],arr_t[3]);
		this.setTime(t.getTime());
		return t.getTime();
	}
}