mirror of
https://github.com/gristlabs/grist-core.git
synced 2026-03-02 04:09:24 +00:00
(core) move home server into core
Summary: This moves enough server material into core to run a home server. The data engine is not yet incorporated (though in manual testing it works when ported). Test Plan: existing tests pass Reviewers: dsagal Reviewed By: dsagal Differential Revision: https://phab.getgrist.com/D2552
This commit is contained in:
56
app/common/timeFormat.ts
Normal file
56
app/common/timeFormat.ts
Normal file
@@ -0,0 +1,56 @@
|
||||
/**
|
||||
* timeFormat(format, date) formats the passed-in Date object using the format string. The format
|
||||
* string may contain the following:
|
||||
* 'h': hour (00 - 23)
|
||||
* 'm': minute (00 - 59)
|
||||
* 's': second (00 - 59)
|
||||
* 'd': day of the month (01 - 31)
|
||||
* 'n': month (01 - 12)
|
||||
* 'y': 4-digit year
|
||||
* 'M': milliseconds (000 - 999)
|
||||
* 'Y': date as 20140212
|
||||
* 'D': date as 2014-02-12
|
||||
* 'T': time as 00:51:06
|
||||
* 'A': full time and date, as 2014-02-12 00:51:06.123
|
||||
* @param {String} format The format string.
|
||||
* @param {Date} date The date/time object to format.
|
||||
* @returns {String} The formatted date and/or time.
|
||||
*/
|
||||
|
||||
function pad(num: number, len: number): string {
|
||||
const s = num.toString();
|
||||
return s.length >= len ? s : "00000000".slice(0, len - s.length) + s;
|
||||
}
|
||||
|
||||
type FormatHelper = (out: string[], date: Date) => void;
|
||||
const timeFormatKeys: {[spec: string]: FormatHelper} = {
|
||||
h: (out, date) => out.push(pad(date.getHours(), 2)),
|
||||
m: (out, date) => out.push(pad(date.getMinutes(), 2)),
|
||||
s: (out, date) => out.push(pad(date.getSeconds(), 2)),
|
||||
d: (out, date) => out.push(pad(date.getDate(), 2)),
|
||||
n: (out, date) => out.push(pad(date.getMonth() + 1, 2)),
|
||||
y: (out, date) => out.push("" + date.getFullYear()),
|
||||
M: (out, date) => out.push(pad(date.getMilliseconds(), 3)),
|
||||
Y: (out, date) => timeFormatHelper(out, 'ynd', date),
|
||||
D: (out, date) => timeFormatHelper(out, 'y-n-d', date),
|
||||
T: (out, date) => timeFormatHelper(out, 'h:m:s', date),
|
||||
A: (out, date) => timeFormatHelper(out, 'D T.M', date),
|
||||
};
|
||||
|
||||
function timeFormatHelper(out: string[], format: string, date: Date) {
|
||||
for (let i = 0, len = format.length; i < len; i++) {
|
||||
const c = format[i];
|
||||
const helper = timeFormatKeys[c];
|
||||
if (helper) {
|
||||
helper(out, date);
|
||||
} else {
|
||||
out.push(c);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export function timeFormat(format: string, date: Date): string {
|
||||
const out: string[] = [];
|
||||
timeFormatHelper(out, format, date);
|
||||
return out.join("");
|
||||
}
|
||||
Reference in New Issue
Block a user