Obsah

Příklady práce s datumem

Datum v proměnné LUA by se měl používat vždy ve formátu čísla os.time().

FieldByName/SetFieldByName

FieldByName vrací tabulku {dateTimeUnix = integer}.

--Nacteni datumu z OBISu - vraci se tabulka s prvkem dateTimeUnix
local Datum = DSI:FieldByName("Datum").dateTimeUnix
--kdyz je v databazi NULL bude promenna Datum = {dateTimeUnix = ""}
 
--Vlozeni datumu do OBISu
SetFieldByName("Datum", {dateTimeUnix=Datum})
 
--Pokud chci pouzit aktualni datum
local Datum=os.time()
--prime pouziti v SetField  (cf.Now() je obsolete)
SetFieldByName("Datum", {dateTimeUnix=os.time()})

Problém NULL

Pokud je datum NULL vrací {dateTimeUnix = ""} - toto platí od verze 1788. V předchozích verzích se pro NULL vracel rovnou string "".

Pro podmínku zda je datum NULL lze ale v obou verzích použít funkci FieldByNameIsNull()

if DSI:FieldByNameIsNull("Datum") then LuaObj:Print("datum je null") end

DEBUG

DEBUG_WRITE("Datum=",cf.FormatUnixTime(Datum))

Dialogy a SQL

Používat nový typ calendartime a pro SQL cf.FormatSQLUnixTime

res = dlg.create({Caption="Test dialog", Encoding=encoding,
  Items={
   {"calendar1", "calendartime", "kalendář time", "To", os.time()},
   {"calendar2", "calendartime", "kalendář time", "To", DSI:FieldByName("Datum").dateTimeUnix},
  }
 
local sql = [[select * from rozpocty_rozpocty where Datum < ']]..cf.FormatSQLUnixTime(res.calendar1)..[[']]

Testy

local Datum=cf.UnixTimeDDMMYYYY("1.1.2009 10:01:30")
local sql = [[select * from rozpocty_rozpocty where Datum < ']]..cf.FormatSQLUnixTime(cf.UnixTimeDDMMYYYY("1.1.2009 10:01:30"))..[[']]

Reporty

@return DSI:FieldByName("Datum")

Optiony

local DatumOtevreni = cf.UnixTime(ClientSession:GetOption("UctoDM.DatumOtevreni"))
ClientSession:SetOption(cf.FormatUnixTime(DatumOtevreni))