diff --git a/news/str_date.rst b/news/str_date.rst
new file mode 100644
index 00000000..a78872df
--- /dev/null
+++ b/news/str_date.rst
@@ -0,0 +1,12 @@
+**Added:** None
+
+**Changed:** None
+
+**Deprecated:** None
+
+**Removed:** None
+
+**Fixed:**
+    * get_dates function works with datetime objects and strings
+
+**Security:** None
diff --git a/regolith/dates.py b/regolith/dates.py
index 13680007..d07460fb 100644
--- a/regolith/dates.py
+++ b/regolith/dates.py
@@ -207,11 +207,20 @@ def get_dates(thing):
                                        month_to_int(thing['month']),
                                        thing['day'])
     if thing.get('begin_date'):
-        begin_date = date_parser.parse(thing.get('begin_date')).date()
+        if isinstance(thing.get('begin_date'), str):
+            begin_date = date_parser.parse(thing.get('begin_date')).date()
+        else:
+            begin_date = thing.get('begin_date')
     if thing.get('end_date'):
-        end_date = date_parser.parse(thing.get('end_date')).date()
+        if isinstance(thing.get('end_date'), str):
+            end_date = date_parser.parse(thing.get('end_date')).date()
+        else:
+            end_date = thing.get('end_date')
     if thing.get('date'):
-        date = date_parser.parse(thing.get('date')).date()
+        if isinstance(thing.get('date'), str):
+            date = date_parser.parse(thing.get('date')).date()
+        else:
+            date = thing.get('date')
     dates = {'begin_date': begin_date, 'end_date': end_date, 'date': date}
     return dates
 

get_dates issues with date objects
diff --git a/tests/test_dates.py b/tests/test_dates.py
index 700519d5..10a3b890 100644
--- a/tests/test_dates.py
+++ b/tests/test_dates.py
@@ -15,6 +15,7 @@ TEST_DATE = date(2019, 6, 15)
 TEST_START_DATE = date(2019, 1, 1)
 TEST_END_DATE = date(2019, 2, 5)
 
+
 @pytest.mark.parametrize(
     "input,expected",
     [
@@ -156,6 +157,21 @@ def test_find_gaps_overlaps(input, flag, expected):
           'date': datetime.date(2020, 5, 20)
           }
          ),
+        ({'date': datetime.date(2020, 5, 20), 'begin_year': 2019, 'end_year': 2020,
+          'end_month': 'Feb',
+          'end_day': 10},
+         {'begin_date': datetime.date(2019, 1, 1),
+          'end_date': datetime.date(2020, 2, 10),
+          'date': datetime.date(2020, 5, 20)
+          }
+         ),
+        ({'date': datetime.date(2020, 5, 20), 'begin_date': datetime.date(2015, 6, 8),
+          'end_date': datetime.date(2025, 10, 4)},
+         {'begin_date': datetime.date(2015, 6, 8),
+          'end_date': datetime.date(2025, 10, 4),
+          'date': datetime.date(2020, 5, 20)
+          }
+         ),
     ],
 )
 def test_get_dates(input, expected):

pip install -e .
parse_log_pytest
requirements.txt
pytest
apt-get update apt-get install -y gcc
3.8
requirements/run.txt requirements/test.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
bibtexparser==1.4.3
Cerberus==1.3.7
certifi==2025.1.31
charset-normalizer==3.4.1
codecov==2.1.13
coverage==7.6.1
docutils==0.20.1
et_xmlfile==2.0.0
exceptiongroup==1.2.2
idna==3.10
iniconfig==2.1.0
Jinja2==3.1.6
MarkupSafe==2.1.5
nameparser==1.1.3
numpy==1.24.4
openpyxl==3.1.5
packaging==24.2
pandas==2.0.3
pluggy==1.5.0
pyparsing==3.1.4
pytest==8.3.5
python-dateutil==2.9.0.post0
pytz==2025.2
-e git+https://github.com/regro/regolith.git@c9bff04e0447f54a665e74997afa8cb64078cfe4#egg=regolith
requests==2.32.3
rever==0.3.3
ruamel.yaml==0.18.10
ruamel.yaml.clib==0.2.8
six==1.17.0
tomli==2.2.1
tzdata==2025.2
urllib3==2.2.3
xonsh==0.14.0

name: regolith
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=3.0.16=h5eee18b_0
  - pip=24.2=py38h06a4308_0
  - python=3.8.20=he870216_0
  - readline=8.2=h5eee18b_0
  - setuptools=75.1.0=py38h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.44.0=py38h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - bibtexparser==1.4.3
      - cerberus==1.3.7
      - certifi==2025.1.31
      - charset-normalizer==3.4.1
      - codecov==2.1.13
      - coverage==7.6.1
      - docutils==0.20.1
      - et-xmlfile==2.0.0
      - exceptiongroup==1.2.2
      - idna==3.10
      - iniconfig==2.1.0
      - jinja2==3.1.6
      - markupsafe==2.1.5
      - nameparser==1.1.3
      - numpy==1.24.4
      - openpyxl==3.1.5
      - packaging==24.2
      - pandas==2.0.3
      - pluggy==1.5.0
      - pyparsing==3.1.4
      - pytest==8.3.5
      - python-dateutil==2.9.0.post0
      - pytz==2025.2
      - requests==2.32.3
      - rever==0.3.3
      - ruamel-yaml==0.18.10
      - ruamel-yaml-clib==0.2.8
      - six==1.17.0
      - tomli==2.2.1
      - tzdata==2025.2
      - urllib3==2.2.3
      - xonsh==0.14.0
prefix: /opt/conda/envs/regolith

tests/test_dates.py::test_get_dates[input12-expected12] tests/test_dates.py::test_get_dates[input13-expected13]
tests/test_dates.py::test_month_to_str[1-01] tests/test_dates.py::test_month_to_str[10-10] tests/test_dates.py::test_month_to_str[Oct-10] tests/test_dates.py::test_month_to_str[Jan-01] tests/test_dates.py::test_get_due_date[2020-05-01-expected0] tests/test_dates.py::test_get_due_date[input1-expected1] tests/test_dates.py::test_get_due_date[2020-True] tests/test_dates.py::test_day_to_str[1-01] tests/test_dates.py::test_day_to_str[10-10] tests/test_dates.py::test_find_gaps_overlaps[input0-False-True] tests/test_dates.py::test_find_gaps_overlaps[input1-False-True] tests/test_dates.py::test_find_gaps_overlaps[input2-False-False] tests/test_dates.py::test_find_gaps_overlaps[input3-False-False] tests/test_dates.py::test_find_gaps_overlaps[input4-True-True] tests/test_dates.py::test_find_gaps_overlaps[input5-False-True] tests/test_dates.py::test_find_gaps_overlaps[input6-False-False] tests/test_dates.py::test_get_dates[input0-expected0] tests/test_dates.py::test_get_dates[input1-expected1] tests/test_dates.py::test_get_dates[input2-expected2] tests/test_dates.py::test_get_dates[input3-expected3] tests/test_dates.py::test_get_dates[input4-expected4] tests/test_dates.py::test_get_dates[input5-expected5] tests/test_dates.py::test_get_dates[input6-expected6] tests/test_dates.py::test_get_dates[input7-expected7] tests/test_dates.py::test_get_dates[input8-expected8] tests/test_dates.py::test_get_dates[input9-expected9] tests/test_dates.py::test_get_dates[input10-expected10] tests/test_dates.py::test_get_dates[input11-expected11] tests/test_dates.py::test_last_day[2020-2-29] tests/test_dates.py::test_last_day[2020-Feb-29] tests/test_dates.py::test_is_current[thing0-False] tests/test_dates.py::test_is_current[thing1-True] tests/test_dates.py::test_is_current[thing2-True] tests/test_dates.py::test_is_current[thing3-True] tests/test_dates.py::test_is_current[thing4-True] tests/test_dates.py::test_is_current[thing5-False] tests/test_dates.py::test_is_current[thing6-True] tests/test_dates.py::test_is_current[thing7-True] tests/test_dates.py::test_is_current[thing8-False] tests/test_dates.py::test_is_current[thing9-True] tests/test_dates.py::test_is_current[thing10-True] tests/test_dates.py::test_is_current[thing11-False] tests/test_dates.py::test_is_current[thing12-False] tests/test_dates.py::test_is_current[thing13-True] tests/test_dates.py::test_is_current[thing14-False] tests/test_dates.py::test_is_current[thing15-False] tests/test_dates.py::test_is_current[thing16-True] tests/test_dates.py::test_is_current[thing17-False] tests/test_dates.py::test_is_current[thing18-False] tests/test_dates.py::test_is_current[thing19-True] tests/test_dates.py::test_is_current[thing20-False] tests/test_dates.py::test_has_started[thing0-False] tests/test_dates.py::test_has_started[thing1-True] tests/test_dates.py::test_has_started[thing2-True] tests/test_dates.py::test_has_started[thing3-True] tests/test_dates.py::test_has_started[thing4-True] tests/test_dates.py::test_has_started[thing5-False] tests/test_dates.py::test_has_started[thing6-True] tests/test_dates.py::test_has_started[thing7-True] tests/test_dates.py::test_has_started[thing8-False] tests/test_dates.py::test_has_started[thing9-True] tests/test_dates.py::test_has_started[thing10-True] tests/test_dates.py::test_has_started[thing11-False] tests/test_dates.py::test_has_started[thing12-True] tests/test_dates.py::test_has_started[thing13-True] tests/test_dates.py::test_has_started[thing14-False] tests/test_dates.py::test_has_started[thing15-True] tests/test_dates.py::test_has_started[thing16-True] tests/test_dates.py::test_has_started[thing17-False] tests/test_dates.py::test_has_started[thing18-True] tests/test_dates.py::test_has_started[thing19-True] tests/test_dates.py::test_has_started[thing20-False] tests/test_dates.py::test_has_finished[thing0-False] tests/test_dates.py::test_has_finished[thing1-False] tests/test_dates.py::test_has_finished[thing2-False] tests/test_dates.py::test_has_finished[thing3-False] tests/test_dates.py::test_has_finished[thing4-False] tests/test_dates.py::test_has_finished[thing5-False] tests/test_dates.py::test_has_finished[thing6-False] tests/test_dates.py::test_has_finished[thing7-False] tests/test_dates.py::test_has_finished[thing8-False] tests/test_dates.py::test_has_finished[thing9-False] tests/test_dates.py::test_has_finished[thing10-False] tests/test_dates.py::test_has_finished[thing11-False] tests/test_dates.py::test_has_finished[thing12-True] tests/test_dates.py::test_has_finished[thing13-False] tests/test_dates.py::test_has_finished[thing14-False] tests/test_dates.py::test_has_finished[thing15-True] tests/test_dates.py::test_has_finished[thing16-False] tests/test_dates.py::test_has_finished[thing17-False] tests/test_dates.py::test_has_finished[thing18-True] tests/test_dates.py::test_has_finished[thing19-False] tests/test_dates.py::test_has_finished[thing20-False] tests/test_dates.py::test_is_before[thing0-True] tests/test_dates.py::test_is_before[thing1-False] tests/test_dates.py::test_is_before[thing2-False] tests/test_dates.py::test_is_before[thing3-True] tests/test_dates.py::test_is_before[thing4-False] tests/test_dates.py::test_is_after[thing0-False] tests/test_dates.py::test_is_after[thing1-False] tests/test_dates.py::test_is_after[thing2-True] tests/test_dates.py::test_is_after[thing3-False] tests/test_dates.py::test_is_after[thing4-True] tests/test_dates.py::test_is_between[thing0-False] tests/test_dates.py::test_is_between[thing1-True] tests/test_dates.py::test_is_between[thing2-True] tests/test_dates.py::test_is_between[thing3-False] tests/test_dates.py::test_is_between[thing4-True]
news/str_date.rst regolith/dates.py
news/str_date.rst regolith/dates.py