Days between dates: Difference between revisions
Content added Content deleted
m (→{{header|Haskell}}: Added a variation (monadic composition in lieu of error handling)) |
|||
Line 952: | Line 952: | ||
stringToDay date = parseTimeM True defaultTimeLocale "%Y-%-m-%-d" date</lang> |
stringToDay date = parseTimeM True defaultTimeLocale "%Y-%-m-%-d" date</lang> |
||
{{out}} |
{{out}} |
||
⚫ | |||
<pre> |
|||
There are |
There are 274 days between 2015-12-31 and 2016-09-30.</pre> |
||
⚫ | |||
Or, composing rather than raising errors: |
|||
</pre> |
|||
<lang haskell>module Tokenized where |
|||
import Data.Time (Day) |
|||
import Data.Time.Calendar (diffDays) |
|||
import Data.Time.Format (defaultTimeLocale, parseTimeM) |
|||
-------------------- DAYS BETWEEN DATES ------------------ |
|||
daysBetween :: String -> String -> Maybe Integer |
|||
daysBetween s1 s2 = |
|||
dayFromString s1 |
|||
>>= ( \d1 -> |
|||
dayFromString s2 |
|||
>>= \d2 -> Just $ diffDays d2 d1 |
|||
) |
|||
dayFromString :: String -> Maybe Day |
|||
dayFromString = |
|||
parseTimeM |
|||
True |
|||
defaultTimeLocale |
|||
"%Y-%-m-%-d" |
|||
--------------------------- TEST ------------------------- |
|||
main :: IO () |
|||
main = |
|||
mapM_ |
|||
(putStrLn . uncurry showDateDiff) |
|||
[ ("2019-01-01", "2019-09-30"), |
|||
("2015-12-31", "2016-09-30") |
|||
] |
|||
showDateDiff :: String -> String -> String |
|||
showDateDiff xs ys = |
|||
maybe |
|||
( unlines |
|||
["Unparseable as date string pair:", xs, ys] |
|||
) |
|||
( \n -> |
|||
concat |
|||
["There are ", show n, " days between ", xs, " and ", ys, "."] |
|||
) |
|||
$ daysBetween xs ys</lang> |
|||
{{Out}} |
|||
<pre>There are 272 days between 2019-01-01 and 2019-09-30. |
|||
There are 274 days between 2015-12-31 and 2016-09-30.</pre> |
|||
=={{header|J}}== |
=={{header|J}}== |