rev |
line source |
jbe/bsw@0
|
1 --[[--
|
jbe@108
|
2 text = -- text with the value formatted as a time, according to the locale settings
|
jbe/bsw@0
|
3 format.time(
|
jbe@108
|
4 value, -- a time, a timestamp or nil
|
jbe/bsw@0
|
5 {
|
jbe@108
|
6 nil_as = nil_text, -- text to be returned for a nil value
|
jbe@108
|
7 hide_seconds = hide_seconds -- set to TRUE to hide seconds
|
jbe/bsw@0
|
8 }
|
jbe/bsw@0
|
9 )
|
jbe/bsw@0
|
10
|
jbe/bsw@0
|
11 Formats a time or timestamp as a time, according to the locale settings.
|
jbe/bsw@0
|
12
|
jbe/bsw@0
|
13 --]]--
|
jbe/bsw@0
|
14
|
jbe/bsw@0
|
15 function format.time(value, options)
|
jbe/bsw@0
|
16 local options = options or {}
|
jbe/bsw@0
|
17 if value == nil then
|
jbe/bsw@0
|
18 return options.nil_as or ""
|
jbe/bsw@0
|
19 end
|
jbe/bsw@0
|
20 if not (
|
jbe/bsw@0
|
21 atom.has_type(value, atom.time) or
|
jbe/bsw@0
|
22 atom.has_type(value, atom.timestamp)
|
jbe/bsw@0
|
23 ) then
|
jbe/bsw@0
|
24 error("Value passed to format.time(...) is neither a time, a timestamp, nor nil.")
|
jbe/bsw@0
|
25 end
|
jbe/bsw@0
|
26 if value.invalid then
|
jbe/bsw@0
|
27 return "invalid"
|
jbe/bsw@0
|
28 end
|
jbe/bsw@0
|
29 local result = locale.get("time_format") or "HH:MM{:SS}"
|
jbe/bsw@0
|
30 if options.hide_seconds then
|
jbe/bsw@0
|
31 result = string.gsub(result, "{[^{|}]*}", "")
|
jbe/bsw@0
|
32 else
|
jbe@105
|
33 result = string.gsub(result, "{([^{|}]*)}", "%1")
|
jbe/bsw@0
|
34 end
|
jbe/bsw@0
|
35 local am_pm
|
jbe/bsw@0
|
36 local hour = value.hour
|
jbe@105
|
37 result = string.gsub(result, "{([^{|}]*)|([^{|}]*)}", function(am, pm)
|
jbe@105
|
38 if hour >= 12 then
|
jbe/bsw@0
|
39 am_pm = pm
|
jbe/bsw@0
|
40 else
|
jbe/bsw@0
|
41 am_pm = am
|
jbe/bsw@0
|
42 end
|
jbe/bsw@0
|
43 return "{|}"
|
jbe/bsw@0
|
44 end)
|
jbe/bsw@0
|
45 if am_pm and hour > 12 then
|
jbe/bsw@0
|
46 hour = hour - 12
|
jbe/bsw@0
|
47 end
|
jbe@109
|
48 if am_pm and hour == 0 then
|
jbe@109
|
49 hour = 12
|
jbe@109
|
50 end
|
jbe/bsw@0
|
51 result = string.gsub(result, "HH", function()
|
jbe/bsw@0
|
52 return format.decimal(hour, { digits = 2 })
|
jbe/bsw@0
|
53 end)
|
jbe/bsw@0
|
54 result = string.gsub(result, "MM", function()
|
jbe/bsw@0
|
55 return format.decimal(value.minute, { digits = 2 })
|
jbe/bsw@0
|
56 end)
|
jbe/bsw@0
|
57 result = string.gsub(result, "SS", function()
|
jbe/bsw@0
|
58 return format.decimal(value.second, { digits = 2 })
|
jbe/bsw@0
|
59 end)
|
jbe/bsw@0
|
60 if am_pm then
|
jbe/bsw@0
|
61 result = string.gsub(result, "{|}", am_pm)
|
jbe/bsw@0
|
62 end
|
jbe/bsw@0
|
63 return result
|
jbe/bsw@0
|
64 end
|