web-ui-pack
Version:
Web package with UI elements
79 lines (78 loc) • 2.69 kB
JavaScript
import localeInfo from "../objects/localeInfo";
export function zeroBefore(v, length) {
const s = `${v}`;
const rc = length - s.length;
if (rc > 0) {
return "0".repeat(rc) + s;
}
return s;
}
function cutEndString(s, length) {
return s.substring(s.length - length);
}
export default function dateToString(v, format) {
if (Number.isNaN(v.valueOf())) {
return "NaN";
}
const isUTC = format.endsWith("Z") || format.endsWith("z");
format = isUTC ? format.substring(0, format.length - 1) : format;
const ukey = isUTC ? "UTC" : "";
let h12 = format.endsWith("a") || format.endsWith("A") ? format[format.length - 1] : "";
format = h12 ? format.substring(0, format.length - 1) : format;
let char = format[0];
let cnt = 1;
let s = "";
for (let i = 1; i <= format.length; ++i) {
const ch = format[i];
if (char !== ch) {
switch (char) {
case "y":
case "Y":
s += cutEndString(zeroBefore(v[`get${ukey}FullYear`].call(v), cnt), cnt);
break;
case "M":
if (cnt === 3) {
s += localeInfo.namesMonthShort[v[`get${ukey}Month`].call(v)].substring(0, 3);
}
else {
s += zeroBefore(v[`get${ukey}Month`].call(v) + 1, cnt);
}
break;
case "d":
case "D":
s += zeroBefore(v[`get${ukey}Date`].call(v), cnt);
break;
case "h":
case "H":
{
const hh = v[`get${ukey}Hours`].call(v);
s += zeroBefore(h12 ? hh % 12 || 12 : hh, cnt);
if (h12) {
h12 = hh < 12 ? (h12 === "A" ? "AM" : "am") : h12 === "A" ? "PM" : "pm";
}
}
break;
case "m":
s += zeroBefore(v[`get${ukey}Minutes`].call(v), cnt);
break;
case "s":
case "S":
s += zeroBefore(v[`get${ukey}Seconds`].call(v), cnt);
break;
case "f":
case "F":
s += zeroBefore(v[`get${ukey}Milliseconds`].call(v), cnt);
break;
default: {
s += char.repeat(cnt);
}
}
char = ch;
cnt = 1;
}
else {
++cnt;
}
}
return s + h12;
}