forked from sheetjs/sheetjs
		
	
		
			
	
	
		
			41 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			41 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | function parse_date_code(v/*:number*/,opts/*:?any*/,b2/*:?boolean*/) { | ||
|  | 	if(v > 2958465 || v < 0) return null; | ||
|  | 	var date = (v|0), time = Math.floor(86400 * (v - date)), dow=0; | ||
|  | 	var dout=[]; | ||
|  | 	var out={D:date, T:time, u:86400*(v-date)-time,y:0,m:0,d:0,H:0,M:0,S:0,q:0}; | ||
|  | 	if(Math.abs(out.u) < 1e-6) out.u = 0; | ||
|  | 	if(opts && opts.date1904) date += 1462; | ||
|  | 	if(out.u > 0.9999) { | ||
|  | 		out.u = 0; | ||
|  | 		if(++time == 86400) { out.T = time = 0; ++date; ++out.D; } | ||
|  | 	} | ||
|  | 	if(date === 60) {dout = b2 ? [1317,10,29] : [1900,2,29]; dow=3;} | ||
|  | 	else if(date === 0) {dout = b2 ? [1317,8,29] : [1900,1,0]; dow=6;} | ||
|  | 	else { | ||
|  | 		if(date > 60) --date; | ||
|  | 		/* 1 = Jan 1 1900 in Gregorian */ | ||
|  | 		var d = new Date(1900, 0, 1); | ||
|  | 		d.setDate(d.getDate() + date - 1); | ||
|  | 		dout = [d.getFullYear(), d.getMonth()+1,d.getDate()]; | ||
|  | 		dow = d.getDay(); | ||
|  | 		if(date < 60) dow = (dow + 6) % 7; | ||
|  | 		if(b2) dow = fix_hijri(d, dout); | ||
|  | 	} | ||
|  | 	out.y = dout[0]; out.m = dout[1]; out.d = dout[2]; | ||
|  | 	out.S = time % 60; time = Math.floor(time / 60); | ||
|  | 	out.M = time % 60; time = Math.floor(time / 60); | ||
|  | 	out.H = time; | ||
|  | 	out.q = dow; | ||
|  | 	return out; | ||
|  | } | ||
|  | SSF.parse_date_code = parse_date_code; | ||
|  | var basedate = new Date(1899, 11, 31, 0, 0, 0); | ||
|  | var dnthresh = basedate.getTime(); | ||
|  | var base1904 = new Date(1900, 2, 1, 0, 0, 0); | ||
|  | function datenum_local(v/*:Date*/, date1904/*:?boolean*/)/*:number*/ { | ||
|  | 	var epoch = v.getTime(); | ||
|  | 	if(date1904) epoch -= 1461*24*60*60*1000; | ||
|  | 	else if(v >= base1904) epoch += 24*60*60*1000; | ||
|  | 	return (epoch - (dnthresh + (v.getTimezoneOffset() - basedate.getTimezoneOffset()) * 60000)) / (24 * 60 * 60 * 1000); | ||
|  | } |