Is it possible to start with a blank date when using the st.date_input?
Use case: when storing dates from a form / several individual date widgets to a database, even the date widgets that the user has not entered default to the current date, which gets updated into the database. Setting the parameter (value=None) does not work.
Your best bet might be to use text_input in this case, and use Python to validate that itās a valid date before writing to the database. But in general, I agree, would be great to have an āoptional/noneā value, especially for fields like forms.
Thanks @randyzwitch , for your prompt response. I hope Streamlit implements this functionality in the near future - it is already there for a date range, but not for single dates.
There are several ways to do this, including shorter, more complex ones (which I have yet to work on). Posting the code here in case anyone needs it. The code validates a date of a certain format (dd-mmm-yy / dd-mmm-yyyy) entered through a text_input widget. The character separators within the date can be either space, forward slash, hyphen and period. This was for my specific use case only, and anyone can repurpose it for their use.
Nevertheless, looking forward to the None option for all widgets.
The code:
def CheckDateFromTextInput(year_digits = 2):
valid_date = True
tdt = st.session_state.mydt
d1 = "" #day Eg. 12 or 3
d2 = "" #month Eg. Jan
d3 = "" #year Eg. 22 for year_digits = 2; 2022 for year_digits = 4
if (year_digits == 2 and (len(tdt) < 8 or len(tdt) > 9)) or \
(year_digits == 4 and (len(tdt) < 10 or len(tdt) > 11)):
valid_date = False
if valid_date:
tdelimiter = ""
if tdt.count("-") == 2:
tdelimiter = "-"
elif tdt.count(".") == 2:
tdelimiter = "."
elif tdt.count("/") == 2:
tdelimiter = "/"
elif tdt.count(" ") == 2:
tdelimiter = " "
else:
valid_date = False # date does not contain delimiters
if valid_date:
dtarr = tdt.split(tdelimiter)
dtarr = [x.strip() for x in dtarr]
#day Eg. 12 or 3
if (len(dtarr[0]) == 1 or len(dtarr[0]) == 2) and dtarr[0].isnumeric():
d1 = dtarr[0].zfill(2)
else:
valid_date = False
#month Eg. Jan
if len(dtarr[1]) != 3 or (dtarr[1].upper() not in ("JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC")):
valid_date = False
else:
d2 = dtarr[1].capitalize()
#year Eg. 22 for year_digits = 2; 2022 for year_digits = 4
if len(dtarr[2]) == year_digits and dtarr[2].isnumeric():
d3 = dtarr[2].zfill(year_digits)
else:
valid_date = False
if not valid_date:
st.error("Invalid date...")
else:
st.session_state.mydt = f"{d1}-{d2}-{d3}"
# for 2-digit year, use...
mydt = st.text_input("Enter Date (dd-mmm-yy)", placeholder="Eg. 12-Apr-22", key="mydt", on_change=CheckDateFromTextInput)
# for 4-digit year, use...
# mydt = st.text_input("Enter Date (dd-mmm-yyyy)", placeholder="Eg. 12-Apr-2022", key="mydt", on_change=CheckDateFromTextInput, args=(4,))
st.write(f"Your date is: {mydt}")
I am creating a query interface where the user can optionally scope the search with a start and/or an end date, but not having a way to return blank or None date makes it difficult.
Thanks for stopping by! We use cookies to help us understand how you interact with our website.
By clicking āAccept allā, you consent to our use of cookies. For more information, please see our privacy policy.
Cookie settings
Strictly necessary cookies
These cookies are necessary for the website to function and cannot be switched off. They are usually only set in response to actions made by you which amount to a request for services, such as setting your privacy preferences, logging in or filling in forms.
Performance cookies
These cookies allow us to count visits and traffic sources so we can measure and improve the performance of our site. They help us understand how visitors move around the site and which pages are most frequently visited.
Functional cookies
These cookies are used to record your choices and settings, maintain your preferences over time and recognize you when you return to our website. These cookies help us to personalize our content for you and remember your preferences.
Targeting cookies
These cookies may be deployed to our site by our advertising partners to build a profile of your interest and provide you with content that is relevant to you, including showing you relevant ads on other websites.