Skip to content
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions shiny/ui/_input_date.py
Original file line number Diff line number Diff line change
Expand Up @@ -310,6 +310,9 @@ def _date_input_tag(
def _as_date_attr(x: Optional[date | str]) -> Optional[str]:
if x is None:
return None
if isinstance(x, date):
return str(x)
return str(date.fromisoformat(x))
if isinstance(x, str):
if len(x) == 0:
return x
x = date.fromisoformat(x)

return x.isoformat()
76 changes: 76 additions & 0 deletions tests/playwright/shiny/components/datepicker/app.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
from datetime import datetime

from dateutil.relativedelta import relativedelta

from shiny import App, Inputs, Outputs, Session, render, ui

min_date = datetime.now()
max_date = min_date + relativedelta(days=10)

# Our input requires strings to be in the format "YYYY-MM-DD"
str_min = min_date.strftime("%Y-%m-%d")
str_max = max_date.strftime("%Y-%m-%d")

ui = ui.page_fluid(
ui.input_date(
"start_date_picker",
"Date Type Input:",
value=max_date,
min=min_date,
max=max_date,
format="dd.mm.yyyy",
language="en",
),
ui.output_text("start"),
ui.input_date(
"str_date_picker",
"String Type Input:",
value=str_max,
min=str_min,
max=str_max,
format="dd-mm-yyyy",
language="en",
),
ui.output_text("str_format"),
ui.input_date(
"none_date_picker",
"None Type Input:",
value=None,
min=None,
max=None,
format="dd-mm-yyyy",
language="en",
),
ui.output_text("none_format"),
ui.input_date(
"empty_date_picker",
"empty Type Input:",
value="",
min=None,
max=None,
format="dd-mm-yyyy",
language="en",
),
ui.output_text("empty_format"),
)


def server(input: Inputs, output: Outputs, session: Session):
@render.text
def start():
return "Start Date Picker Value: " + str(input.start_date_picker())

@render.text
def str_format():
return "String Date Picker Value: " + str(input.str_date_picker())

@render.text
def none_format():
return "None Date Picker Value: " + str(input.none_date_picker())

@render.text
def empty_format():
return "Empty Date Picker Value: " + str(input.empty_date_picker())


app = App(ui, server, debug=True)
Loading