Moin, vielleicht kann es ja der ein oder andere gebrauchen. z.B. für einen Wherigo Nachcache, der überprüfen soll, ob es überhaupt Nacht ist oder um zu verhindern, dass ein Cache in der Nacht gemacht wird.
Der Code errechnet anhand Länge, Breite und Datum den Zeitpunkt des Sonnenunterganges oder Aufganges und gibt auch noch die verbleibende zeit bis zum Untergang zurück.
Der Code errechnet anhand Länge, Breite und Datum den Zeitpunkt des Sonnenunterganges oder Aufganges und gibt auch noch die verbleibende zeit bis zum Untergang zurück.
Code:
function IstNachSonnenuntergang()
local Jetzt=os.date("!*t")
local DR = math.pi / 180
local RD = 1 / DR
local Breite = 52.1
local Laenge = 8.1
local M = Jetzt.month
local D = Jetzt.day
Breite = DR * Breite
local L0 = 4.8771 + 0.0172 * ((math.floor(275 * M / 9) - 2 * math.floor((M + 9) / 12) + D - 30) + 0.5 - Laenge / 360)
local C = 0.03342 * math.sin(L0 + 1.345)
local C2 = RD * (math.atan(math.tan(L0 + C)) - math.atan(0.9175 * math.tan(L0 + C)) - C)
local SD = 0.3978 * math.sin(L0 + C)
local SC = (SD * math.sin(Breite) + 0.0145) / (math.cos(Breite) * (math.sqrt(1 - SD * SD)))
local C3 = RD * math.atan(SC / math.sqrt(1 - SC * SC))
local R1 = 6 - (Laenge + C2 + C3) / 15
local HR = math.floor(R1)
local MR = math.floor((R1 - HR) * 60)
local S1 = 18 - (Laenge + C2 - C3) / 15
local HS = math.floor(S1)
local MS = math.floor((S1 - HS) * 60)
local MinDesTages = Jetzt.hour * 60 + Jetzt.min
local MinDesTagesAufgang = HR * 60 + MR
local MinDesTagesUntergang = HS * 60 + MS
local ss1 = "Tag "..HR..":"..MR.." "..Jetzt.hour..":"..Jetzt.min.." "..HS..":"..MS
local ss2 = "Nacht "..HR..":"..MR.." "..Jetzt.hour..":"..Jetzt.min.." "..HS..":"..MS
local NochStunden = math.floor((MinDesTagesUntergang - MinDesTages)/60)
local NochMinuten = (MinDesTagesUntergang - MinDesTages) % 60
obj_minuten = NochMinuten
obj_stunden = NochStunden
if MinDesTages < MinDesTagesUntergang and MinDesTages > MinDesTagesAufgang then
obj_SpielAktiv = false
else
obj_Spielaktiv = true
end
return
end