在Shiny dateRangeInput中避免最大低于min

时间:2016-06-19 17:15:52

标签: r shiny

我想知道是否有一个技巧可以阻止用户使用Shiny中的dateRangeInput在开始日期之前设置结束日期(比如第一个日期是“01-01-2016”,第二个日期会比这一点)。

我尝试每次重新定义最小值和最大值,然后我卡住了,无法让我的分钟恢复到原来的值。

1 个答案:

答案 0 :(得分:3)

这是一个例子。基本上它会观察开始日期的变化,然后动态更新dateRangeInput对象。如果先前选择的结束日期早于新的开始日期,则更新结束日期。最小可能日期也会更新,以便用户无法选择早于开始日期的结束日期。

library(shiny)

ui <- shinyUI(fluidPage(

   titlePanel("Dynamically change dateRangeInput"),

   sidebarLayout(
      sidebarPanel(
        dateRangeInput("date_range", "Range of dates")
      ),

      mainPanel(
         textOutput("text")
      )
   )
))

server <- shinyServer(function(input, output, session) {

  # Update the dateRangeInput if start date changes
  observeEvent(input$date_range[1], {
    end_date = input$date_range[2]
    # If end date is earlier than start date, update the end date to be the same as the new start date
    if (input$date_range[2] < input$date_range[1]) {
      end_date = input$date_range[1]
    }
    updateDateRangeInput(session,"date_range", start=input$date_range[1], end=end_date, min=input$date_range[1] )
  })

  output$text <- renderText({
    validate(
      need(input$date_range[2] >= input$date_range[1], "End date cannot be earlier than start date!")
    )
    input$date_range[2] >= input$date_range[1]
  })

})

shinyApp(ui = ui, server = server)