UNPKG

web-ui-pack

Version:
79 lines (78 loc) 2.69 kB
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; }