mireadesktop/weekday.hs
2025-01-02 21:27:32 +03:00

34 lines
No EOL
1.3 KiB
Haskell

import Data.Time
import Data.Time.Calendar.WeekDate (toWeekDate)
data Period = Autumn
| Winter
| Spring
deriving (Show, Eq)
period :: (Ord a, Num t) => (MonthOfYear -> t -> a) -> a -> Period
period thisYear today
| today < thisYear February 9 = Winter
| today >= thisYear September 1 = Autumn
| otherwise = Spring
week :: Period -> Day -> String
week Winter _ = "Хороших праздников, удачной сессии!"
week p d
| dayOfWeek d == Sunday = "Сегодня воскресенье, лучше иди домой"
| otherwise = show x ++ " неделя" where
x = 1 + x0 - x1 - if limitIsSunday then 1 else 0
limitIsSunday = dayOfWeek limit == Sunday
(_, x1, _) = toWeekDate limit
(y, x0, _) = toWeekDate d
limit = if p == Spring
then this February 9
else this September 1
this = fromGregorian y
main :: IO ()
main = do
now <- getCurrentTime
let today = utctDay now
--let today = fromGregorian 2024 September 9 -- it was TEST
let (year,_,_) = toGregorian today
putStr $ week (period (fromGregorian year) today) today