R Shiny DateRange仅输入月份年份

TiF*_*r3D 8 r date-range shiny shinydashboard

有没有办法dateRangeInput()在Shiny中使用Hack或者创建一个选择器,以便它只选择月份(没有一天),或者它是否自动选择所选月份的第一天而不显示日期选择?或者我应该创建另一个月份日期选择器(滑块,选择框......)

dateRangeInput('dateRange',label = "Pédiode d'analyse : ",format = "mm/yyyy",language="fr",
    start = Sys.Date() %m-% months(12), end=Sys.Date(),startview = "year",separator = " - ")
Run Code Online (Sandbox Code Playgroud)

我想要的是在选择日期时删除此步骤:dateRangeInput

小智 15

我刚刚习惯airDatePicker()这样做。您可以将弹出日历的最小视图编辑为“月”,并选择日期格式为“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"
                   )
Run Code Online (Sandbox Code Playgroud)

我刚刚开发的版本看起来像这样(灰色可能是我截取屏幕截图时光标悬停的位置):

仅显示月份的日期选择器示例


Por*_*hop 6

看看monthStart下面的这个自定义函数,它可以用来强制日期为该月和年的第一个日期

示例 1,显示给定月份的第一天。如果您想在应用程序中稍后使用日期对象,这可能很有用,因此它始终指向给定月份和年份的第一天

#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)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

示例 2,仅显示月份和年份

#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)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明