Hallo Zusammen,
ich möchte die Zeitdifferenz zwischen zwei Datumswerten berechnen. Die Differenz soll in Stunden ausgeben werden, auch über mehrere Tage hinweg. Bsp. 2 Tage = 48h. Das Ganze soll als Funktion verfügbar sein, dass ich es in mehreren Scripten wiederverwenden kann.
Meine Lösung: Ich nehme im ersten Schritt zwei Datumswerte und berechne über eine Funktion (toTimestamp) den Datumswert in Epochensekunden. Im zweiten Schritte berechne ich die Differenz der beiden Werte über eine weitere Funktion (timeDifference).
Leider kommt aber beim Delta immer ein falscher Wert raus. Sieht jemand den Fehler und kann helfen. Nach meinem Verständnis müsste die Deltaberechnung eigentlich tun.
Danke,
Oliver
--[[
%% properties
%% events
%% globals
--]]
-- VARIABLES
local sleep = "07-09-2019 23:00"
local awake = "08-09-2019 7:00"
-- FUNCTIONS
-- from hour:min to unixtime
local function toTimestamp(time)
currentDate = os.date("*t");
hours, minutes = time:match("^(%d+):(%d+)")
return os.time({ year=currentDate.year, month=currentDate.month, day=currentDate.day, hour=hours, min=minutes })
end
-- from Human Date (day-month-year hour:min) to Timestamp
local function toDatestamp(date)
d, m, y, h, mi = date:match("^(%d+)-(%d+)-(%d+)%s+(%d+):(%d+)")
fibaro:debug( y.. '-' ..m.. '-' ..d.. ' ' ..h.. ':' ..mi );
return os.time({ year=y, month=m, day=d, hour=h, min=mi })
end
-- from unixtime to hour:min
local function toHumanDate(unixtime)
currentDate = (os.date('%d-%m-%Y %H:%M:%S', unixtime))
return currentDate;
end
-- Function to calculate Delta between times
local function timeDifference(time1, time2)
timeDelta = (time2-time1); -- Minus 60min
fibaro:debug("Time Difference (unix): " ..timeDelta);
timeDifference = (os.date('%H:%M', timeDelta))
--timeDifference = (os.date('%X', timeDelta))
return timeDifference;
end
-- CODE
local awakeTime = tonumber(toDatestamp(awake));
fibaro:debug("Awake Time (unix): "..awakeTime)
fibaro:debug("Awake Time (Human): "..toHumanDate(awakeTime))
local sleepTime = tonumber(toDatestamp(sleep));
fibaro:debug("Sleep Time (unix): "..sleepTime)
fibaro:debug("Sleep Time (Human): "..toHumanDate(sleepTime))
fibaro:debug("Time Difference: "..timeDifference(sleepTime, awakeTime))