1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
{-# LANGUAGE DeriveGeneric #-}
module Model.Date where
import GHC.Generics
import Data.Yaml
data Date = Date
{ month :: Int
, year :: Int
} deriving (Show, Read, Eq, Generic)
yearAndMonthDiff :: Date -> Date -> (Int, Int)
yearAndMonthDiff d1 d2 =
let totalMonths = monthDiff d1 d2
in (totalMonths `div` 12, totalMonths `mod` 12)
monthDiff :: Date -> Date -> Int
monthDiff (Date m1 y1) (Date m2 y2) =
if y1 == y2 then
1 + abs (m1 - m2)
else
let (minM, minY, maxM, maxY) =
if y1 < y2 then
(m1, y1, m2, y2)
else
(m2, y2, m1, y1)
in 12 * (maxY - minY - 1) + (13 - minM) + maxM
instance FromJSON Date
|