|
5 | 5 | [om-widgets.utils :as utils]
|
6 | 6 | [cljs-time.format :as time-format]
|
7 | 7 | [cljs-time.coerce :as timec]
|
| 8 | + [goog.object :as gobj] |
8 | 9 | [pallet.thread-expr :as th]))
|
9 | 10 |
|
10 | 11 |
|
11 | 12 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
12 |
| -(def date-local-format "dd/MM/yyyy") |
13 | 13 | (def date-local-mask "00/00/0000")
|
14 | 14 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
15 | 15 |
|
| 16 | +(defn get-browser-locale |
| 17 | + [] |
| 18 | + (or (gobj/get js/navigator "language") |
| 19 | + (first (gobj/get js/navigator "languages")) |
| 20 | + "en")) ;; Default to English if no locale is found |
| 21 | + |
| 22 | +(defn infer-date-format-pattern |
| 23 | + [] |
| 24 | + (let [locale (get-browser-locale) |
| 25 | + test-date (js/Date. 2024 10 28) ; Nov 28, 2024 (months are zero-based) |
| 26 | + formatter (js/Intl.DateTimeFormat. locale) |
| 27 | + formatted-date (.format formatter test-date)] |
| 28 | + (-> formatted-date |
| 29 | + (clojure.string/replace #"2024" "yyyy") |
| 30 | + (clojure.string/replace #"11" "MM") |
| 31 | + (clojure.string/replace #"28" "dd")))) |
| 32 | + |
16 | 33 | (defn- date-from-localstring
|
17 | 34 | [value fmt]
|
18 | 35 | (let [d (time-format/parse (time-format/formatter fmt) value)]
|
|
27 | 44 | [input-type value]
|
28 | 45 | (condp = input-type
|
29 | 46 | "date" (try
|
30 |
| - (string-from-date value date-local-format) |
| 47 | + (string-from-date value (infer-date-format-pattern)) |
31 | 48 | (catch js/Error e
|
32 | 49 | ;; assume empty string for unhandled values
|
33 | 50 | (str value)))
|
|
37 | 54 | [output-type value]
|
38 | 55 | (condp = output-type
|
39 | 56 | "date" (try
|
40 |
| - (date-from-localstring value date-local-format) |
| 57 | + (date-from-localstring value (infer-date-format-pattern)) |
41 | 58 | (catch js/Error e
|
42 | 59 | value))
|
43 | 60 | "numeric" (let [f (js/parseFloat value)]
|
|
0 commit comments