night-light/NightLight.Core/PartsOfDay.fs

26 lines
750 B
FSharp

module internal NightLight.Core.PartsOfDay
open System
type PartOfDay =
| Day
| Night
let private startOfDay = TimeSpan.FromHours 5.25
let private endOfDay = TimeSpan.FromHours 20.5
let getPartOfDay (dateTime: DateTime) =
match dateTime with
| _ when dateTime.TimeOfDay >= startOfDay && dateTime.TimeOfDay < endOfDay -> Day
| _ -> Night
let getAlarmWeight (dateTime: DateTime) =
let currentTime = dateTime.TimeOfDay
let alarmEnd = startOfDay + TimeSpan(0, 15, 0)
let totalSeconds = (alarmEnd - startOfDay).TotalSeconds
if startOfDay <= currentTime && currentTime <= alarmEnd then
let elapsedSeconds = (currentTime - startOfDay).TotalSeconds
elapsedSeconds / totalSeconds
else
1.0