diff --git a/src/Data/Time/Patterns.hs b/src/Data/Time/Patterns.hs
--- a/src/Data/Time/Patterns.hs
+++ b/src/Data/Time/Patterns.hs
@@ -70,6 +70,7 @@
     except,
     intersect,
     union,
+    until,
     -- * Queries
     elementOf,
     instancesFrom,
@@ -88,9 +89,10 @@
 import qualified Data.Time.Patterns.Internal    as I
 import           Numeric.Interval
 import           Prelude                        hiding (cycle, elem, filter,
-                                                 take)
+                                                 take, until)
 
--- | A DatePattern describes a sequence of intervals of type Data.Thyme.Day.
+-- | A `DatePattern` describes a sequence of intervals of type 
+-- `Data.Time.Calendar.Day`.
 type DatePattern = IntervalSequence' Day
 
 -- | An event that occurs every month.
@@ -339,3 +341,12 @@
 
 monthOfYear :: Int -> DatePattern
 monthOfYear i = IntervalSequence $ \d -> Just (getMonth i d, monthOfYear i)
+
+-- | Only include date intervals that end before the given date.
+-- 
+-- > >> let third = (take 1 $ skip 2 day) `inEach` month
+-- > >> let pattern = third `until` (fromGregorian 2020 12 01)
+-- > >> instancesFrom (fromGregorian 2017 01 01) pattern
+-- > [2017-01-03,2017-02-03 ... 2020-10-03,2020-11-03]
+until :: DatePattern -> Day -> DatePattern
+until = flip I.stopAt'
diff --git a/time-patterns.cabal b/time-patterns.cabal
--- a/time-patterns.cabal
+++ b/time-patterns.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                time-patterns
-version:             0.1.4.1
+version:             0.1.4.2
 synopsis:            Patterns for recurring events
 license:             BSD3
 license-file:        LICENSE
