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)
|
-- Right (NoInterval,DateSpan 2008-08-01..2008-09-30)
|
||||||
-- >>> p "aug to oct"
|
-- >>> p "aug to oct"
|
||||||
-- Right (NoInterval,DateSpan 2008-08-01..2008-09-30)
|
-- 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"
|
-- >>> p "every 3 days in Aug"
|
||||||
-- Right (Days 3,DateSpan 2008-08)
|
-- Right (Days 3,DateSpan 2008-08)
|
||||||
-- >>> p "daily from aug"
|
-- >>> p "daily from aug"
|
||||||
@ -973,6 +977,7 @@ reportingintervalp = choice'
|
|||||||
periodexprdatespanp :: Day -> TextParser m DateSpan
|
periodexprdatespanp :: Day -> TextParser m DateSpan
|
||||||
periodexprdatespanp rdate = choice $ map try [
|
periodexprdatespanp rdate = choice $ map try [
|
||||||
doubledatespanp rdate,
|
doubledatespanp rdate,
|
||||||
|
quarterdatespanp rdate,
|
||||||
fromdatespanp rdate,
|
fromdatespanp rdate,
|
||||||
todatespanp rdate,
|
todatespanp rdate,
|
||||||
justdatespanp rdate
|
justdatespanp rdate
|
||||||
@ -989,6 +994,19 @@ doubledatespanp rdate = liftA2 fromToSpan
|
|||||||
where
|
where
|
||||||
fromToSpan = DateSpan `on` (Just . fixSmartDate rdate)
|
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 :: Day -> TextParser m DateSpan
|
||||||
fromdatespanp rdate = fromSpan <$> choice
|
fromdatespanp rdate = fromSpan <$> choice
|
||||||
[ string' "from" *> skipNonNewlineSpaces *> smartdate
|
[ string' "from" *> skipNonNewlineSpaces *> smartdate
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user