| 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 |