-
-
Notifications
You must be signed in to change notification settings - Fork 76
/
date.js
42 lines (34 loc) · 960 Bytes
/
date.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import { format } from "../deps/date.js";
import { merge } from "../utils.js";
const formats = new Map([
["ATOM", "yyyy-MM-dd'T'HH:mm:ssXXX"],
["DATE", "yyyy-MM-dd"],
["DATETIME", "yyyy-MM-dd HH:mm:ss"],
["TIME", "HH:mm:ss"],
["HUMAN_DATE", "PPP"],
["HUMAN_DATETIME", "PPPppp"],
]);
// Default options
const defaults = {
locales: {},
formats: {},
};
export default function (userOptions = {}) {
const options = merge(defaults, userOptions);
const defaultLocale = Object.keys(options.locales).shift();
return (site) => {
site.filter("date", filter);
function filter(date, pattern = "DATE", lang = defaultLocale) {
if (!date) {
return;
}
if (!(date instanceof Date)) {
date = new Date(date);
}
const patt = options.formats[pattern] || formats.get(pattern) ||
pattern;
const locale = options.locales[lang];
return format(date, patt, { locale });
}
};
}