Время округления до 5-минутного интервала в Lua - PullRequest
2 голосов
/ 13 июля 2020

У меня есть строковая переменная, которую я должен округлить до 5-минутного интервала, но чтобы сохранить ее как строку, например: 12:23 должно быть 12:25 am 12:58 pm должно быть 13:00 pm 11:59 am должно быть 12: 00pm. Я пробовал это в lua, но это не очень хорошо, и я уверен, что есть лучший способ сделать это. Может быть, кто-нибудь сможет направить меня или, возможно, помочь. Вот что я сделал:

startRoundH=string.sub(var,1,2)
  startRoundM1=string.sub(var,4,4)
  startRoundM2=string.sub(var,5,5)      
  startAMPM=string.lower(string.sub(var,6,7))
  if(tonumber(startRoundM2))<=2 then startRoundM2="0"
  elseif(tonumber(startRoundM2)>2 and tonumber(startRoundM2)<=7) then startRoundM2="5"
  elseif (tonumber(startRoundM2)==8 or tonumber(startRoundM2)==9) then
      startRoundM2="0"
      if(tonumber(startRoundM1)~=5) then startRoundM1=tonumber(startRoundM1)+1 
      else 
          startRoundM1="0"   
          if(tonumber(startRoundH)<9) then startRoundH=tonumber(startRoundH)+1 startRoundH="0"..startRoundH
          elseif(tonumber(startRoundH)==10 or tonumber(startRoundH)==9) then startRoundH=tonumber(startRoundH)+1 
          elseif (tonumber(startRoundH)==11) then 
              startRoundH="12" 
              if(startAMPM=="am") then startAMPM="pm" else startAMPM="am" end
          elseif (tonumber(startRoundH)==12) then startRoundH="01" end
      end       
  end

Спасибо!

1 Ответ

3 голосов
/ 13 июля 2020
local function round5min(var)
   local h, m, ampm = var:match"^(%d+):(%d+)(%a+)$"
   local t = (({am=0,pm=12})[ampm:lower()]+h%12)*60+m+2
   t = t-t%5
   m = t%60
   t = (t-m)/60
   h = t%12
   return ("%d:%02d%s"):format((h-1)%12+1, m, ({"am","pm"})[(t-h)/12%2+1])
end

print(round5min("9:23am"))   --> 9:25am
print(round5min("11:56am"))  --> 11:55am
print(round5min("11:57am"))  --> 11:55am
print(round5min("11:58am"))  --> 12:00pm
print(round5min("11:59am"))  --> 12:00pm
print(round5min("11:59pm"))  --> 12:00am
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...