queryEndDate
This commit is contained in:
parent
19d42f8c99
commit
2bfbdd175b
@ -22,6 +22,7 @@ module Hledger.Query (
|
|||||||
queryIsStartDateOnly,
|
queryIsStartDateOnly,
|
||||||
queryIsSym,
|
queryIsSym,
|
||||||
queryStartDate,
|
queryStartDate,
|
||||||
|
queryEndDate,
|
||||||
queryDateSpan,
|
queryDateSpan,
|
||||||
queryDepth,
|
queryDepth,
|
||||||
queryEmpty,
|
queryEmpty,
|
||||||
@ -447,6 +448,15 @@ queryStartDate False (Date (DateSpan (Just d) _)) = Just d
|
|||||||
queryStartDate True (Date2 (DateSpan (Just d) _)) = Just d
|
queryStartDate True (Date2 (DateSpan (Just d) _)) = Just d
|
||||||
queryStartDate _ _ = Nothing
|
queryStartDate _ _ = Nothing
|
||||||
|
|
||||||
|
-- | What end date (or secondary date) does this query specify, if any ?
|
||||||
|
-- For OR expressions, use the latest of the dates. NOT is ignored.
|
||||||
|
queryEndDate :: Bool -> Query -> Maybe Day
|
||||||
|
queryEndDate secondary (Or ms) = latestMaybeDate' $ map (queryEndDate secondary) ms
|
||||||
|
queryEndDate secondary (And ms) = earliestMaybeDate' $ map (queryEndDate secondary) ms
|
||||||
|
queryEndDate False (Date (DateSpan _ (Just d))) = Just d
|
||||||
|
queryEndDate True (Date2 (DateSpan _ (Just d))) = Just d
|
||||||
|
queryEndDate _ _ = Nothing
|
||||||
|
|
||||||
queryTermDateSpan (Date span) = Just span
|
queryTermDateSpan (Date span) = Just span
|
||||||
queryTermDateSpan _ = Nothing
|
queryTermDateSpan _ = Nothing
|
||||||
|
|
||||||
@ -464,14 +474,22 @@ queryDateSpans False (Date span) = [span]
|
|||||||
queryDateSpans True (Date2 span) = [span]
|
queryDateSpans True (Date2 span) = [span]
|
||||||
queryDateSpans _ _ = []
|
queryDateSpans _ _ = []
|
||||||
|
|
||||||
-- | What is the earliest of these dates, where Nothing is earliest ?
|
-- | What is the earliest of these dates, where Nothing is latest ?
|
||||||
earliestMaybeDate :: [Maybe Day] -> Maybe Day
|
earliestMaybeDate :: [Maybe Day] -> Maybe Day
|
||||||
earliestMaybeDate = headDef Nothing . sortBy compareMaybeDates
|
earliestMaybeDate mds = head $ sortBy compareMaybeDates mds ++ [Nothing]
|
||||||
|
|
||||||
-- | What is the latest of these dates, where Nothing is earliest ?
|
-- | What is the latest of these dates, where Nothing is earliest ?
|
||||||
latestMaybeDate :: [Maybe Day] -> Maybe Day
|
latestMaybeDate :: [Maybe Day] -> Maybe Day
|
||||||
latestMaybeDate = headDef Nothing . sortBy (flip compareMaybeDates)
|
latestMaybeDate = headDef Nothing . sortBy (flip compareMaybeDates)
|
||||||
|
|
||||||
|
-- | What is the earliest of these dates, ignoring Nothings ?
|
||||||
|
earliestMaybeDate' :: [Maybe Day] -> Maybe Day
|
||||||
|
earliestMaybeDate' = headDef Nothing . sortBy compareMaybeDates . filter isJust
|
||||||
|
|
||||||
|
-- | What is the latest of these dates, ignoring Nothings ?
|
||||||
|
latestMaybeDate' :: [Maybe Day] -> Maybe Day
|
||||||
|
latestMaybeDate' = headDef Nothing . sortBy (flip compareMaybeDates) . filter isJust
|
||||||
|
|
||||||
-- | Compare two maybe dates, Nothing is earliest.
|
-- | Compare two maybe dates, Nothing is earliest.
|
||||||
compareMaybeDates :: Maybe Day -> Maybe Day -> Ordering
|
compareMaybeDates :: Maybe Day -> Maybe Day -> Ordering
|
||||||
compareMaybeDates Nothing Nothing = EQ
|
compareMaybeDates Nothing Nothing = EQ
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user