如何在LUA中从一个已设定的时间中添加或减去一个值

我有一个值从其他地方拖动滑块而来,其值在0和100之间。

我将这个值放在sliderValue中,并在minutes变量中将其转换为分钟(我想是)。 如果原始值为50,则时间不变,但如果它是51,则我想要将2分钟添加到时间,反之亦然,49减去2分钟。

始终为2分钟(2,4,6,8等),因此变量为minutes。

我只简单地想要从我的“8:05”时间中加减分钟数。

你有什么想法?

function tempFunc()
local currentDate = os.date(“*t”);
local startSource = fibaro:getSourceTrigger()
local sliderValue = fibaro:getGlobalValue(“MorningTime”)

local minutes = ((sliderValue - 50)x 120if((fibaro:getGlobalValue(“MorningScene”)==“On”and 
     ((currentDate.wday == 2 or
     currentDate.wday == 3 or
     currentDate.wday == 4 or
     currentDate.wday == 5 or
     currentDate.wday == 6)和
     string.format(“%02d”,currentDate.hour)..“:”..string.format(“%02d”,currentDate.min)==“08:05”)) 
     then 
     fibaro:call(5,“setArmed”,“1”);
  end 
 setTimeout(tempFunc,60*1000end 

if(sourceTrigger [“type”] ==“autostart”)then 
  tempFunc() 
 else 

 local currentDate = os.date(“*t”);
 local startSource = fibaro:getSourceTrigger()
 如果
   (fibaro:getGlobalValue(“MorningScene”)==“On”and 
  (currentDate.wday == 2 or
   currentDate.wday == 3 or
   currentDate.wday == 4 or
   currentDate.wday == 5 or
   currentDate.wday == 6)) 
  then 
    fibaro:call(5,“setArmed”,“1”)
 end 

end 
点赞
用户570336
用户570336

如果你打算将 currentDate 回传给 os.time,就按照 Lua 手册,在 currentDate.min 的值上加上 minute 值即可:

这些字段中的值不需要在其有效范围内。例如,如果 sec 是 -10,则表示比其他字段指定的时间少10秒;如果 hour 是 1000,则表示比其他字段指定的时间多1000小时。

因此:

-- Fixed calculation - esp. use * for multiplaction, rather than x!
local minutes = ((sliderValue - 50) * 2)
currentDate.min = currentDate.min + minutes

-- Later, use the 'new value' in currentDate
local newTimestamp = os.time(currentDate) -- do something with newTimestamp

我强烈建议阅读手册上对于 os.time() and os.date() 的条目,以了解 Lua 中日期计算背后的概念。

2016-01-20 13:04:09