module("luci.http.protocol.date", package.seeall)
+local ucache = { }
+local hcache = { }
+
+
MONTHS = {
"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug",
"Sep", "Oct", "Nov", "Dec"
-- Convert a HTTP date to unixtime
function to_unix(date)
- local wd, day, mon, yr, hr, min, sec, tz = date:match(
- "([A-Z][a-z][a-z]), ([0-9]+) " ..
- "([A-Z][a-z][a-z]) ([0-9]+) " ..
- "([0-9]+):([0-9]+):([0-9]+) " ..
- "([A-Z0-9%+%-]+)"
- )
-
- if day and mon and yr and hr and min and sec then
- -- find month
- local month = 1
- for i = 1, 12 do
- if MONTHS[i] == mon then
- month = i
- break
+ if not ucache[date] then
+ local wd, day, mon, yr, hr, min, sec, tz = date:match(
+ "([A-Z][a-z][a-z]), ([0-9]+) " ..
+ "([A-Z][a-z][a-z]) ([0-9]+) " ..
+ "([0-9]+):([0-9]+):([0-9]+) " ..
+ "([A-Z0-9%+%-]+)"
+ )
+
+ if day and mon and yr and hr and min and sec then
+ -- find month
+ local month = 1
+ for i = 1, 12 do
+ if MONTHS[i] == mon then
+ month = i
+ break
+ end
end
- end
- -- convert to epoch time
- return tz_offset(tz) + os.time( {
- year = yr,
- month = month,
- day = day,
- hour = hr,
- min = min,
- sec = sec
- } )
+ -- convert to epoch time
+ ucache[date] = tz_offset(tz) + os.time( {
+ year = yr,
+ month = month,
+ day = day,
+ hour = hr,
+ min = min,
+ sec = sec
+ } )
+ end
end
- return 0
+ return ucache[date] or 0
end
-- Convert a unixtime to HTTP date
function to_http(time)
- return os.date( "%a, %d %b %Y %H:%M:%S GMT", time )
+ if not hcache[time] then
+ hcache[time] = os.date( "%a, %d %b %Y %H:%M:%S GMT", time )
+ end
+
+ return hcache[time]
end
-- Compare two dates