2017-03-21 07:45:12 +00:00
|
|
|
/*jshint -W086 */
|
2022-06-14 19:38:34 +00:00
|
|
|
var ROUNDING_FLAG = "rounding is necessary"
|
2017-03-21 07:45:12 +00:00
|
|
|
function write_date(type/*:number*/, fmt/*:string*/, val, ss0/*:?number*/)/*:string*/ {
|
|
|
|
var o="", ss=0, tt=0, y = val.y, out, outl = 0;
|
|
|
|
switch(type) {
|
|
|
|
case 98: /* 'b' buddhist year */
|
|
|
|
y = val.y + 543;
|
|
|
|
/* falls through */
|
|
|
|
case 121: /* 'y' year */
|
|
|
|
switch(fmt.length) {
|
|
|
|
case 1: case 2: out = y % 100; outl = 2; break;
|
|
|
|
default: out = y % 10000; outl = 4; break;
|
|
|
|
} break;
|
|
|
|
case 109: /* 'm' month */
|
|
|
|
switch(fmt.length) {
|
|
|
|
case 1: case 2: out = val.m; outl = fmt.length; break;
|
|
|
|
case 3: return months[val.m-1][1];
|
|
|
|
case 5: return months[val.m-1][0];
|
|
|
|
default: return months[val.m-1][2];
|
|
|
|
} break;
|
|
|
|
case 100: /* 'd' day */
|
|
|
|
switch(fmt.length) {
|
|
|
|
case 1: case 2: out = val.d; outl = fmt.length; break;
|
|
|
|
case 3: return days[val.q][0];
|
|
|
|
default: return days[val.q][1];
|
|
|
|
} break;
|
|
|
|
case 104: /* 'h' 12-hour */
|
|
|
|
switch(fmt.length) {
|
|
|
|
case 1: case 2: out = 1+(val.H+11)%12; outl = fmt.length; break;
|
|
|
|
default: throw 'bad hour format: ' + fmt;
|
|
|
|
} break;
|
|
|
|
case 72: /* 'H' 24-hour */
|
|
|
|
switch(fmt.length) {
|
|
|
|
case 1: case 2: out = val.H; outl = fmt.length; break;
|
|
|
|
default: throw 'bad hour format: ' + fmt;
|
|
|
|
} break;
|
|
|
|
case 77: /* 'M' minutes */
|
|
|
|
switch(fmt.length) {
|
|
|
|
case 1: case 2: out = val.M; outl = fmt.length; break;
|
|
|
|
default: throw 'bad minute format: ' + fmt;
|
|
|
|
} break;
|
|
|
|
case 115: /* 's' seconds */
|
2017-07-28 20:24:37 +00:00
|
|
|
if(fmt != 's' && fmt != 'ss' && fmt != '.0' && fmt != '.00' && fmt != '.000') throw 'bad second format: ' + fmt;
|
|
|
|
if(val.u === 0 && (fmt == "s" || fmt == "ss")) return pad0(val.S, fmt.length);
|
|
|
|
/*::if(!ss0) ss0 = 0; */
|
|
|
|
if(ss0 >= 2) tt = ss0 === 3 ? 1000 : 100;
|
|
|
|
else tt = ss0 === 1 ? 10 : 1;
|
|
|
|
ss = Math.round((tt)*(val.S + val.u));
|
2022-06-14 19:38:34 +00:00
|
|
|
if(ss >= 60*tt) throw ROUNDING_FLAG;
|
2017-07-28 20:24:37 +00:00
|
|
|
if(fmt === 's') return ss === 0 ? "0" : ""+ss/tt;
|
|
|
|
o = pad0(ss,2 + ss0);
|
|
|
|
if(fmt === 'ss') return o.substr(0,2);
|
|
|
|
return "." + o.substr(2,fmt.length-1);
|
2017-03-21 07:45:12 +00:00
|
|
|
case 90: /* 'Z' absolute time */
|
|
|
|
switch(fmt) {
|
|
|
|
case '[h]': case '[hh]': out = val.D*24+val.H; break;
|
|
|
|
case '[m]': case '[mm]': out = (val.D*24+val.H)*60+val.M; break;
|
2022-06-21 20:58:17 +00:00
|
|
|
case '[s]': case '[ss]': out = ((val.D*24+val.H)*60+val.M)*60+(ss0 < 1 ? Math.round(val.S+val.u) : val.S); break;
|
2017-03-21 07:45:12 +00:00
|
|
|
default: throw 'bad abstime format: ' + fmt;
|
|
|
|
} outl = fmt.length === 3 ? 1 : 2; break;
|
|
|
|
case 101: /* 'e' era */
|
2020-06-27 22:39:56 +00:00
|
|
|
out = y; outl = 1; break;
|
2017-03-21 07:45:12 +00:00
|
|
|
}
|
2020-06-27 22:39:56 +00:00
|
|
|
var outstr = outl > 0 ? pad0(out, outl) : "";
|
|
|
|
return outstr;
|
2017-03-21 07:45:12 +00:00
|
|
|
}
|
|
|
|
/*jshint +W086 */
|