Skip to content

DatePickerRange popup calendar additional date avaliable even with min/max date specified  #2910

Open
@ForsakenRei

Description

@ForsakenRei

Thank you so much for helping improve the quality of Dash!

We do our best to catch bugs during the release process, but we rely on your help to find the ones that slip through.

Describe your context
Please provide us your environment, so we can easily reproduce the issue.

  • replace the result of pip list | grep dash below
dash                 2.17.1
dash-core-components 2.0.0
dash-html-components 2.0.0
dash-table           5.0.0
  • if frontend related, tell us your Browser, Version and OS

    • OS: Oracle Linux 9 with Python 3.12
    • Browser Chrome
    • Version 126

Describe the bug

When using DatePickerRange with min_date_allowed and max_date_allowed, choosing a date for start date, there will be one more day after the max date displayed as available but not really selectable.

Expected behavior

Nothing should be available outside of the min_date_allowed and max_date_allowed range?

Screenshots

If applicable, add screenshots or screen recording to help explain your problem.
image
image

Here's the minimum code to reproduce it.

from datetime import date
from dash import Dash, dcc, html, Input, Output, callback

app = Dash(__name__)
app.layout = html.Div([
    dcc.DatePickerRange(
        id='my-date-picker-range',
        min_date_allowed=date(2024, 6, 1),
        max_date_allowed=date(2024, 6, 15),
        initial_visible_month=date(2024, 6, 1),
        end_date=date(2024, 6, 15),
        minimum_nights=0
    ),
    html.Div(id='output-container-date-picker-range')
])


@callback(
    Output('output-container-date-picker-range', 'children'),
    Input('my-date-picker-range', 'start_date'),
    Input('my-date-picker-range', 'end_date'))
def update_output(start_date, end_date):
    string_prefix = 'You have selected: '
    if start_date is not None:
        start_date_object = date.fromisoformat(start_date)
        start_date_string = start_date_object.strftime('%B %d, %Y')
        string_prefix = string_prefix + 'Start Date: ' + start_date_string + ' | '
    if end_date is not None:
        end_date_object = date.fromisoformat(end_date)
        end_date_string = end_date_object.strftime('%B %d, %Y')
        string_prefix = string_prefix + 'End Date: ' + end_date_string
    if len(string_prefix) == len('You have selected: '):
        return 'Select a date to see it displayed here'
    else:
        return string_prefix


if __name__ == '__main__':
    app.run(debug=True)

Metadata

Metadata

Assignees

No one assigned

    Labels

    P3backlogbugsomething brokensev-3annoyance with workaround

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions