docs: def dateRange(*args):
      """
      Accepted forms:
  
      * ``dateRange(day)``
      * ``dateRange(day1, day2)``
      * ``dateRange(mon)``
      * ``dateRange(month1, month2)``
      * ``dateRange(year)``
      * ``dateRange(year1, year2)``
      * ``dateRange(day1, month1, day2, month2)``
      * ``dateRange(month1, year1, month2, year2)``
      * ``dateRange(day1, month1, year1, day2, month2, year2)``
      * ``dateRange(day1, month1, year1, day2, month2, year2, gmt)``
  
      ``day``
          is the day of month between 1 and 31 (as an integer).
      ``month``
          is one of the month strings:
              ``JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC``
      ``year``
          is the full year number, for example 1995 (but not 95). Integer.
      ``gmt``
          is either the string "GMT", which makes time comparison occur in GMT timezone;
          if left unspecified, times are taken to be in the local timezone.
  
      Even though the above examples don't show,
      the "GMT" parameter can be specified in any of the 9 different call profiles, always as the last parameter.
  
      If only a single value is specified (from each category: ``day``, ``month``, ``year``),
      the function returns a true value only on days that match that specification.
      If both values are specified, the result is true between those times, including bounds.
  
      :rtype: bool
      """
      months = [None, 'JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC']
      gmt_arg_present = (len(args) == 2 and args[1] == 'GMT') or (len(args) % 2 == 1 and len(args) > 1)
      if gmt_arg_present:
          # Remove and handle GMT argument.
          today = _now(args[-1])
          args = args[:-1]
      else:
          today = _now()
      today = today.date()
  
      num_args = len(args)
      try:
          if num_args == 1:
              # Match only against the day, month, or year.
              val = args[0]
              if val in months:
                  return today.month == months.index(val)
              if 1 <= val <= 31:
                  return today.day == val
              return today.year == val
          if num_args == 2:
              # Match against inclusive range of day, month, or year.
              a1, a2 = args
              if a1 in months and a2 in months:
                  return months.index(a1) <= today.month <= months.index(a2)
              if 1 <= a1 <= 31:
                  return a1 <= today.day <= a2
              return a1 <= today.year <= a2
          if num_args == 4:
              # Match against inclusive range of day-month or month-year.
              if args[0] in months and args[2] in months:
                  m1, y1, m2, y2 = args
                  m1, m2 = months.index(m1), months.index(m2)
                  return date(y1, m1, 1) <= today <= date(y2, m2, monthrange(y2, m2)[1])
              if args[1] in months and args[3] in months:
                  d1, m1, d2, m2 = args
                  m1, m2 = months.index(m1), months.index(m2)
                  return date(today.year, m1, d1) <= today <= date(today.year, m2, d2)
          if num_args == 6:
              # Match against inclusive range of start date and end date.
              d1, m1, y1, d2, m2, y2 = args
              m1, m2 = months.index(m1), months.index(m2)
              return date(y1, m1, d1) <= today <= date(y2, m2, d2)
      except (ValueError, TypeError):
          # Probably an invalid M/D/Y argument.
          return False
  
      return False