今天和另一个日期之间的日期

Dates between today and another date

我正在绞尽脑汁想做一个函数来计算今天和给定日期之间的天数。

可能今天函数:

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

并考虑使用 diffDays,但无法使用 ::Day 日期

有什么想法吗?

你的 formatTime 版本 returns 一个字符串,但你想要一个 Day (当你检查它时它看起来像你的字符串,但完全是不同的类型)。这是编写 today 函数的一种方法,使用 utctDayUTCTime 中获取 Day:

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

today :: IO Day
today = fmap utctDay getCurrentTime

这里有一个使用它的 days-from-today 函数(我给出了较短的名称 daysAway):

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

如果您总是将目标指定为日历日期,您可以很容易地做到这一点:

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

给定一个 shorthand 常用相对日期的函数:

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

我们可以证明安妮论文的正确性:

ghci> tomorrow >>= daysAway
1