diff options
Diffstat (limited to 'src/Model/Date.hs')
-rw-r--r-- | src/Model/Date.hs | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/Model/Date.hs b/src/Model/Date.hs new file mode 100644 index 0000000..7edb6fb --- /dev/null +++ b/src/Model/Date.hs @@ -0,0 +1,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 |