Skip to content

Instantly share code, notes, and snippets.

@tankorsmash
Created December 7, 2022 20:35
Show Gist options
  • Save tankorsmash/f52efb7d5d86a562f31296728c963771 to your computer and use it in GitHub Desktop.
Save tankorsmash/f52efb7d5d86a562f31296728c963771 to your computer and use it in GitHub Desktop.
Generate midnight and random time during the day
{-| Returns a random time and the midnight time in a TimeZone
-}
fuzzMidnightAndToday : Time.Zone -> Fuzz.Fuzzer ( Time.Zone, Time.Posix, Time.Posix )
fuzzMidnightAndToday timezone =
let
currentTimeInDays : Time.Posix -> Duration.Duration
currentTimeInDays currentTime =
let
conversionFunc toTime inTime =
toTime timezone currentTime
|> (toFloat >> inTime)
|> Duration.inDays
in
List.sum
[ conversionFunc Time.toHour Duration.hours
, conversionFunc Time.toMinute Duration.minutes
, conversionFunc Time.toSecond Duration.seconds
, conversionFunc Time.toMillis Duration.milliseconds
]
|> Duration.days
in
Fuzz.map
(\currentTime ->
let
midnightDay =
let
numDays =
currentTimeInDays currentTime
|> Duration.inDays
daysPassedMidnight =
numDays
|> (\flooredDays ->
numDays - (floor flooredDays |> toFloat)
)
|> Duration.days
in
Duration.subtractFrom currentTime daysPassedMidnight
in
( timezone, midnightDay, currentTime )
)
fuzzTime
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment