lib: quarterdatespanp (fixes #1247)
This commit is contained in:
parent
ccac09fb1b
commit
9c9701fe7d
@ -868,6 +868,10 @@ weekday = do
|
||||
-- Right (NoInterval,DateSpan 2008-08-01..2008-09-30)
|
||||
-- >>> p "aug to oct"
|
||||
-- Right (NoInterval,DateSpan 2008-08-01..2008-09-30)
|
||||
-- >>> p "2009q2"
|
||||
-- Right (NoInterval,DateSpan 2009Q2)
|
||||
-- >>> p "Q3"
|
||||
-- Right (NoInterval,DateSpan 2008Q3)
|
||||
-- >>> p "every 3 days in Aug"
|
||||
-- Right (Days 3,DateSpan 2008-08)
|
||||
-- >>> p "daily from aug"
|
||||
@ -973,6 +977,7 @@ reportingintervalp = choice'
|
||||
periodexprdatespanp :: Day -> TextParser m DateSpan
|
||||
periodexprdatespanp rdate = choice $ map try [
|
||||
doubledatespanp rdate,
|
||||
quarterdatespanp rdate,
|
||||
fromdatespanp rdate,
|
||||
todatespanp rdate,
|
||||
justdatespanp rdate
|
||||
@ -989,6 +994,19 @@ doubledatespanp rdate = liftA2 fromToSpan
|
||||
where
|
||||
fromToSpan = DateSpan `on` (Just . fixSmartDate rdate)
|
||||
|
||||
-- |
|
||||
-- >>> parsewith (quarterdatespanp (parsedate "2018/01/01") <* eof) "q1"
|
||||
-- Right DateSpan 2018Q1
|
||||
-- >>> parsewith (quarterdatespanp (parsedate "2018/01/01") <* eof) "2020q4"
|
||||
-- Right DateSpan 2020Q4
|
||||
quarterdatespanp :: Day -> TextParser m DateSpan
|
||||
quarterdatespanp rdate = do
|
||||
let defaultYear = first3 $ toGregorian rdate
|
||||
y <- maybe defaultYear read <$> optional (count 4 digitChar)
|
||||
char 'q'
|
||||
q <- oneOf ("1234"::[Char])
|
||||
return $ periodAsDateSpan $ QuarterPeriod y $ read [q]
|
||||
|
||||
fromdatespanp :: Day -> TextParser m DateSpan
|
||||
fromdatespanp rdate = fromSpan <$> choice
|
||||
[ string' "from" *> skipNonNewlineSpaces *> smartdate
|
||||
|
||||
Loading…
Reference in New Issue
Block a user