Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Dates between today and another date

im burning my brains trying to make a function that gives me the ammount of days between todays date and a given date.

possible today function:

today = fmap (formatTime defaultTimeLocale "%Y-%m-%d") getCurrentTime

and thought using diffDays, but wont be able to make it work with a ::Day date

any ideas?


1 Answers

Your formatTime version returns a string, but you want a Day (which looks like your string when you inspect it, but is a different type entirely). Here's one way to write a today function, using utctDay to get a Day out of a UTCTime:

import Data.Time.Calendar
import Data.Time.Clock

today :: IO Day
today = fmap utctDay getCurrentTime

And here's a days-from-today function (which I gave the shorter name daysAway) that uses it:

daysAway :: Day -> IO Integer
daysAway day = fmap (diffDays day) today

If you're always specifying the target as a calendar date, you can do that easily enough:

daysToDate :: Integer -> Int -> Int -> IO Integer
daysToDate year month day = daysAway $ fromGregorian year month day

Given a shorthand function for a commonly-needed relative day:

tomorrow :: IO Day
tomorrow = fmap (addDays 1) today

We can demonstrate the correctness of Annie's Thesis:

ghci> tomorrow >>= daysAway
1
like image 185
Mark Reed Avatar answered May 25 '26 14:05

Mark Reed



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!