webmcp

view framework/env/format/time.lua @ 105:fd31e0aa629a

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

Impressum / About Us