forked from sheetjs/sheetjs
		
	ssf seconds/hours time rounding
This commit is contained in:
		
							parent
							
								
									ad0fb7766b
								
							
						
					
					
						commit
						c8e6d5c20f
					
				@ -687,7 +687,7 @@ function fmt_is_date(fmt) {
 | 
			
		||||
}
 | 
			
		||||
SSF.is_date = fmt_is_date;
 | 
			
		||||
function eval_fmt(fmt, v, opts, flen) {
 | 
			
		||||
	var out = [], o = "", i = 0, c = "", lst='t', dt, j, cc;
 | 
			
		||||
	var out = [], o = "", i = 0, c = "", lst='t', dt, j, cc, sec = false, usec = false;
 | 
			
		||||
	var hr='H';
 | 
			
		||||
	/* Tokenize */
 | 
			
		||||
	while(i < fmt.length) {
 | 
			
		||||
@ -716,6 +716,7 @@ function eval_fmt(fmt, v, opts, flen) {
 | 
			
		||||
				if(v < 0) return "";
 | 
			
		||||
				if(dt==null) { dt=parse_date_code(v, opts); if(dt==null) return ""; }
 | 
			
		||||
				o = c; while(++i < fmt.length && fmt.charAt(i).toLowerCase() === c) o+=c;
 | 
			
		||||
				if(c === 's') sec = true;
 | 
			
		||||
				if(c === 'm' && lst.toLowerCase() === 'h') c = 'M';
 | 
			
		||||
				if(c === 'h') c = hr;
 | 
			
		||||
				out[out.length] = {t:c, v:o}; lst = c; break;
 | 
			
		||||
@ -745,7 +746,7 @@ function eval_fmt(fmt, v, opts, flen) {
 | 
			
		||||
			case '.':
 | 
			
		||||
				if(dt != null) {
 | 
			
		||||
					o = c; while(++i < fmt.length && (c=fmt.charAt(i)) === "0") o += c;
 | 
			
		||||
					out[out.length] = {t:'s', v:o}; break;
 | 
			
		||||
					out[out.length] = {t:'s', v:o}; usec=true; break;
 | 
			
		||||
				}
 | 
			
		||||
				/* falls through */
 | 
			
		||||
			case '0': case '#':
 | 
			
		||||
@ -767,6 +768,11 @@ function eval_fmt(fmt, v, opts, flen) {
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Round number up if displaying seconds with no microseconds */
 | 
			
		||||
	if (dt && (dt.S + dt.u >= 59.5) && sec && !usec) {
 | 
			
		||||
		dt=parse_date_code(Math.round((v - Math.floor(v))*86400)/86400, opts)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Scan for date/time parts */
 | 
			
		||||
	var bt = 0, ss0 = 0, ssm;
 | 
			
		||||
	for(i=out.length-1, lst='t'; i >= 0; --i) {
 | 
			
		||||
@ -793,6 +799,7 @@ function eval_fmt(fmt, v, opts, flen) {
 | 
			
		||||
if(dt.u >= 0.5) { dt.u = 0; ++dt.S; }
 | 
			
		||||
			if(dt.S >=  60) { dt.S = 0; ++dt.M; }
 | 
			
		||||
			if(dt.M >=  60) { dt.M = 0; ++dt.H; }
 | 
			
		||||
			if(dt.H >=  24) { dt.H = 0; ++dt.d; }
 | 
			
		||||
			break;
 | 
			
		||||
		case 2:
 | 
			
		||||
if(dt.u >= 0.5) { dt.u = 0; ++dt.S; }
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user