aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README.md3
-rw-r--r--yt_dlp/options.py5
-rw-r--r--yt_dlp/utils.py32
3 files changed, 19 insertions, 21 deletions
diff --git a/README.md b/README.md
index f8813cbb6..a9a9a4c63 100644
--- a/README.md
+++ b/README.md
@@ -427,7 +427,8 @@ You can also fork the project on github and run your fork's [build workflow](.gi
(e.g. 50k or 44.6m)
--date DATE Download only videos uploaded on this date.
The date can be "YYYYMMDD" or in the format
- "(now|today)[+-][0-9](day|week|month|year)(s)?"
+ [now|today|yesterday][-N[day|week|month|year]].
+ Eg: --date today-2weeks
--datebefore DATE Download only videos uploaded on or before
this date. The date formats accepted is the
same as --date
diff --git a/yt_dlp/options.py b/yt_dlp/options.py
index 60f866570..8a9195217 100644
--- a/yt_dlp/options.py
+++ b/yt_dlp/options.py
@@ -435,9 +435,8 @@ def create_parser():
'--date',
metavar='DATE', dest='date', default=None,
help=(
- 'Download only videos uploaded on this date. '
- 'The date can be "YYYYMMDD" or in the format '
- '"(now|today)[+-][0-9](day|week|month|year)(s)?"'))
+ 'Download only videos uploaded on this date. The date can be "YYYYMMDD" or in the format '
+ '[now|today|yesterday][-N[day|week|month|year]]. Eg: --date today-2weeks'))
selection.add_option(
'--datebefore',
metavar='DATE', dest='datebefore', default=None,
diff --git a/yt_dlp/utils.py b/yt_dlp/utils.py
index e683eaaf1..ba73c2191 100644
--- a/yt_dlp/utils.py
+++ b/yt_dlp/utils.py
@@ -1756,14 +1756,14 @@ def subtitles_filename(filename, sub_lang, sub_format, expected_real_ext=None):
def datetime_from_str(date_str, precision='auto', format='%Y%m%d'):
- """
- Return a datetime object from a string in the format YYYYMMDD or
- (now|today|yesterday|date)[+-][0-9](microsecond|second|minute|hour|day|week|month|year)(s)?
-
- format: string date format used to return datetime object from
- precision: round the time portion of a datetime object.
- auto|microsecond|second|minute|hour|day.
- auto: round to the unit provided in date_str (if applicable).
+ R"""
+ Return a datetime object from a string.
+ Supported format:
+ (now|today|yesterday|DATE)([+-]\d+(microsecond|second|minute|hour|day|week|month|year)s?)?
+
+ @param format strftime format of DATE
+ @param precision Round the datetime object: auto|microsecond|second|minute|hour|day
+ auto: round to the unit provided in date_str (if applicable).
"""
auto_precision = False
if precision == 'auto':
@@ -1775,7 +1775,7 @@ def datetime_from_str(date_str, precision='auto', format='%Y%m%d'):
if date_str == 'yesterday':
return today - datetime.timedelta(days=1)
match = re.match(
- r'(?P<start>.+)(?P<sign>[+-])(?P<time>\d+)(?P<unit>microsecond|second|minute|hour|day|week|month|year)(s)?',
+ r'(?P<start>.+)(?P<sign>[+-])(?P<time>\d+)(?P<unit>microsecond|second|minute|hour|day|week|month|year)s?',
date_str)
if match is not None:
start_time = datetime_from_str(match.group('start'), precision, format)
@@ -1798,16 +1798,14 @@ def datetime_from_str(date_str, precision='auto', format='%Y%m%d'):
def date_from_str(date_str, format='%Y%m%d', strict=False):
- """
- Return a datetime object from a string in the format YYYYMMDD or
- (now|today|yesterday|date)[+-][0-9](microsecond|second|minute|hour|day|week|month|year)(s)?
-
- If "strict", only (now|today)[+-][0-9](day|week|month|year)(s)? is allowed
+ R"""
+ Return a date object from a string using datetime_from_str
- format: string date format used to return datetime object from
+ @param strict Restrict allowed patterns to "YYYYMMDD" and
+ (now|today|yesterday)(-\d+(day|week|month|year)s?)?
"""
- if strict and not re.fullmatch(r'\d{8}|(now|today)[+-]\d+(day|week|month|year)(s)?', date_str):
- raise ValueError(f'Invalid date format {date_str}')
+ if strict and not re.fullmatch(r'\d{8}|(now|today|yesterday)(-\d+(day|week|month|year)s?)?', date_str):
+ raise ValueError(f'Invalid date format "{date_str}"')
return datetime_from_str(date_str, precision='microsecond', format=format).date()