R Shiny DateRange Input month year only

后端 未结 2 515
不思量自难忘°
不思量自难忘° 2021-01-04 09:12

Is there a way to Hack or Create a dateRangeInput() selector in Shiny so that it selects only month-year (no day) or that it automatically selects the first day

相关标签:
2条回答
  • 2021-01-04 09:28

    I've just used airDatePicker() to do this. You can edit the minimum view of the popup calendar to "month" and select the date format as "yyyy-mm".

    airDatepickerInput("input_var_name",
                       label = "Start month",
                       value = "2015-10-01",
                       maxDate = "2016-08-01",
                       minDate = "2015-08-01",
                       view = "months", #editing what the popup calendar shows when it opens
                       minView = "months", #making it not possible to go down to a "days" view and pick the wrong date
                       dateFormat = "yyyy-mm"
                       )
    

    The version I've just been working on looks like this (greyed may is where cursor was hovering when I took the screenshot):

    0 讨论(0)
  • 2021-01-04 09:32

    Have a look at this custom function monthStart below which can be used to force the date to the first date of that month and year

    Example 1, Display the first day of a given month. This may be useful if you want to use the date object for later use in your app, so it will always point to the first day of a given month and year

    #rm(list=ls())
    library(shiny)
    
    monthStart <- function(x) {
      x <- as.POSIXlt(x)
      x$mday <- 1
      as.Date(x)
    }
    
    ui <- basicPage(dateRangeInput('dateRange',label = "Pédiode d'analyse : ",format = "mm/yyyy",language="fr",start = Sys.Date(), end=Sys.Date(),startview = "year",separator = " - "),
                    textOutput("SliderText")
    )
    server <- shinyServer(function(input, output, session){
    
      Dates <- reactiveValues()
      observe({
        Dates$SelectedDates <- c(as.character(monthStart(input$dateRange[1])),as.character(monthStart(input$dateRange[2])))
      })
      output$SliderText <- renderText({Dates$SelectedDates})
    })
    shinyApp(ui = ui, server = server)
    

    Example 2, Display only the month and year

    #rm(list=ls())
    library(shiny)
    
    monthStart <- function(x) {
      x <- as.POSIXlt(x)
      x$mday <- 1
      as.Date(x)
    }
    
    ui <- basicPage(dateRangeInput('dateRange',label = "Pédiode d'analyse : ",format = "mm/yyyy",language="fr",start = Sys.Date(), end=Sys.Date(),startview = "year",separator = " - "),
                    textOutput("SliderText")
    )
    server <- shinyServer(function(input, output, session){
    
      Dates <- reactiveValues()
      observe({
        Dates$SelectedDates <- c(as.character(format(input$dateRange[1],format = "%m/%Y")),as.character(format(input$dateRange[2],format = "%m/%Y")))
      })
      output$SliderText <- renderText({Dates$SelectedDates})
    })
    shinyApp(ui = ui, server = server)
    

    0 讨论(0)
提交回复
热议问题