Skip to content

Commit d3847b4

Browse files
authored
Merge pull request #58 from MichaelXavier/month-length
Add lastDayOfMonth
2 parents 0cd54ec + 06036af commit d3847b4

File tree

1 file changed

+21
-0
lines changed

1 file changed

+21
-0
lines changed

src/Data/Date.purs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ module Data.Date
88
, weekday
99
, diff
1010
, isLeapYear
11+
, lastDayOfMonth
1112
, module Data.Date.Component
1213
) where
1314

@@ -83,6 +84,26 @@ isLeapYear y = (mod y' 4 == 0) && ((mod y' 400 == 0) || not (mod y' 100 == 0))
8384
where
8485
y' = fromEnum y
8586

87+
-- | Get the final day of a month and year, accounting for leap years
88+
lastDayOfMonth :: Year -> Month -> Day
89+
lastDayOfMonth y m = case m of
90+
January -> unsafeDay 31
91+
February
92+
| isLeapYear y -> unsafeDay 29
93+
| otherwise -> unsafeDay 28
94+
March -> unsafeDay 31
95+
April -> unsafeDay 30
96+
May -> unsafeDay 31
97+
June -> unsafeDay 30
98+
July -> unsafeDay 31
99+
August -> unsafeDay 31
100+
September -> unsafeDay 30
101+
October -> unsafeDay 31
102+
November -> unsafeDay 30
103+
December -> unsafeDay 31
104+
where
105+
unsafeDay = unsafePartial fromJust <<< toEnum
106+
86107
-- TODO: these could (and probably should) be implemented in PS
87108
foreign import canonicalDateImpl :: Fn4 (Year -> Int -> Day -> Date) Year Int Day Date
88109
foreign import calcWeekday :: Fn3 Year Int Day Int

0 commit comments

Comments
 (0)