webmcp
view framework/env/format/time.lua @ 89:24ed2cd053aa
Bugfix for :get_current() methods in atom library (missing import of "os" functions)
| author | jbe | 
|---|---|
| date | Tue Aug 21 00:55:26 2012 +0200 (2012-08-21) | 
| parents | 9fdfb27f8e67 | 
| children | fd31e0aa629a | 
 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
