aboutsummaryrefslogtreecommitdiff
path: root/src/Model/Date.hs
blob: 7edb6fb651619b82cc0ff32f63a40566c16b6ed7 (plain)
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