codehard-datetime-converter
Version:
## How To install
106 lines (105 loc) • 3.53 kB
JavaScript
// index.ts
var RE_DMY = /^(\d{2})\/(\d{2})\/(\d{4})(?:[ T](.*))?$/;
var RE_YMD = /^(\d{4})-(\d{2})-(\d{2})(?:[ T](.*))?$/;
var RE_HMS = /^(\d{2}):(\d{2})(?::(\d{2}))?$/;
var normalizeYear = (y) => y > 2400 ? y - 543 : y;
var assertValid = (y, m, d) => {
const dt = new Date(y, m - 1, d);
if (dt.getFullYear() !== y || dt.getMonth() !== m - 1 || dt.getDate() !== d) {
throw new Error("Invalid date value");
}
};
var parseSafe = (input) => {
if (input instanceof Date) {
return new Date(input.getTime());
}
const s = input.trim();
let m = RE_YMD.exec(s);
if (m) {
const y = normalizeYear(Number(m[1]));
const mo = Number(m[2]);
const d = Number(m[3]);
assertValid(y, mo, d);
if (m[4]) {
const dt2 = new Date(s);
if (isNaN(+dt2)) {
throw new Error("Unsupported date/time");
}
return dt2;
}
return new Date(y, mo - 1, d);
}
m = RE_DMY.exec(s);
if (m) {
const d = Number(m[1]);
const mo = Number(m[2]);
const y = normalizeYear(Number(m[3]));
assertValid(y, mo, d);
const base = new Date(y, mo - 1, d);
if (m[4]) {
const t = m[4].trim();
const tm = RE_HMS.exec(t);
if (tm) {
const hh = Number(tm[1]);
const mi = Number(tm[2]);
const ss = tm[3] ? Number(tm[3]) : 0;
base.setHours(hh, mi, ss, 0);
} else {
const dt2 = new Date(s);
if (!isNaN(+dt2)) {
return dt2;
}
}
}
return base;
}
const dt = new Date(s);
if (isNaN(+dt)) {
throw new Error("Unsupported date format");
}
return dt;
};
var formatTimeTH = (dt, withSeconds = false) => new Intl.DateTimeFormat("th-TH", {
hour: "2-digit",
minute: "2-digit",
second: withSeconds ? "2-digit" : undefined,
hour12: false
}).format(dt);
var formatDate = (date, locale, month) => new Intl.DateTimeFormat(locale, {
day: "2-digit",
month,
year: "numeric"
}).format(date);
var formatDateTime = (date, locale, month, withSeconds = false) => `${formatDate(date, locale, month)} ${formatTimeTH(date, withSeconds)}`;
var toShortTHDate = (date) => formatDate(parseSafe(date), "th-TH-u-ca-buddhist" /* TH */, "short" /* SHORT */);
var toShortTHDateTime = (date) => `${formatDateTime(parseSafe(date), "th-TH-u-ca-buddhist" /* TH */, "short" /* SHORT */)} น.`;
var toLongTHDate = (date) => formatDate(parseSafe(date), "th-TH-u-ca-buddhist" /* TH */, "long" /* LONG */);
var toLongTHDateTime = (date) => `${formatDateTime(parseSafe(date), "th-TH-u-ca-buddhist" /* TH */, "long" /* LONG */)} น.`;
var toShortUniversalDate = (date) => formatDate(parseSafe(date), "en-GB" /* EN */, "short" /* SHORT */);
var toShortUniversalDateTime = (date) => formatDateTime(parseSafe(date), "en-GB" /* EN */, "short" /* SHORT */);
var toLongUniversalDate = (date) => formatDate(parseSafe(date), "en-GB" /* EN */, "long" /* LONG */);
var toLongUniversalDateTime = (date) => formatDateTime(parseSafe(date), "en-GB" /* EN */, "long" /* LONG */);
var toTime = (date) => formatTimeTH(parseSafe(date));
var codehard_datetime_converter_default = {
toShortTHDate,
toShortTHDateTime,
toLongTHDate,
toLongTHDateTime,
toShortUniversalDate,
toShortUniversalDateTime,
toLongUniversalDate,
toLongUniversalDateTime,
toTime
};
export {
toTime,
toShortUniversalDateTime,
toShortUniversalDate,
toShortTHDateTime,
toShortTHDate,
toLongUniversalDateTime,
toLongUniversalDate,
toLongTHDateTime,
toLongTHDate,
codehard_datetime_converter_default as default
};