mydateInput <- function(inputId, label, value = NULL, min = NULL, max = NULL,
format = "yyyy-mm-dd", startview = "month", weekstart = 0, language = "en", minviewmode="months",
width = NULL) {
# If value is a date object, convert it to a string with yyyy-mm-dd format
# Same for min and max
if (inherits(value, "Date")) value <- format(value, "%Y-%m-%d")
if (inherits(min, "Date")) min <- format(min, "%Y-%m-%d")
if (inherits(max, "Date")) max <- format(max, "%Y-%m-%d")
htmltools::attachDependencies(
tags$div(id = inputId,
class = "shiny-date-input form-group shiny-input-container",
style = if (!is.null(width)) paste0("width: ", validateCssUnit(width), ";"),
controlLabel(inputId, label),
tags$input(type = "text",
# datepicker class necessary for dropdown to display correctly
class = "form-control datepicker",
`data-date-language` = language,
`data-date-weekstart` = weekstart,
`data-date-format` = format,
`data-date-start-view` = startview,
`data-date-min-view-mode` = minviewmode,
`data-min-date` = min,
`data-max-date` = max,
`data-initial-date` = value
)
),
datePickerDependency
)
}
`%AND%` <- function(x, y) {
if (identical(!is.null(x), !is.na(x)))
if (identical(!is.null(y), !is.na(y)))
return(y)
return(NULL)
}
controlLabel <- function(controlName, label) {
label %AND% tags$label(class = "control-label", `for` = controlName, label)
}
datePickerDependency <- htmlDependency(
"bootstrap-datepicker", "1.0.2", c(href = "shared/datepicker"),
script = "js/bootstrap-datepicker.min.js",
stylesheet = "css/datepicker.css")
4条答案
按热度按时间ux6nzvsh1#
我不相信
dateInput
已经实现了引导minViewMode选项作为函数参数,所以我在我自己的函数副本中添加了它(见下文)。我不得不添加一些其他必需的函数。这不是很好。最好的选择可能是向RStudio提交请求,因为添加这个minviewmode选项似乎很简单。cidc1ykv2#
@MartinJohnHadley:基本上通过添加相同的三行@StevenMortimer添加到dateInput的代码到dateRangeInput。这将minViewMode添加到shinys dateRangeInput。
1.在https://github.com/rstudio/shiny/blob/master/R/input-daterange.R上找到代码
1.添加默认参数
minviewmode="months"
1.将
data-date-min-view-mode = minviewmode
添加到两个div1.添加缺少的参数(在github存档中搜索shiny)
1.享受您的自定义dateRange输入:-)
最好的问候sandro
验证码:
uhry853o3#
下面是另一个方法(代码冗余更少,希望更简单),由同事贡献。与复制shiny::dateInput函数代码不同,可以在之后将min/max-view-mode部分添加到Shiny对象中。然后可以按预期使用旧参数'startview'和新的'minview'/'maxview':
下面是一个简单的例子:
更新:
为了解决下面darKnight的问题,我扩展了这个例子,并引入了一个参数来设置最大可选时间分辨率。有关可能参数的完整列表,请参阅:
https://bootstrap-datepicker.readthedocs.io/en/latest/options.html
dldeef674#
想使用上一个答案中的代码的人:您需要使用更新的datePickerDependecy(可以从https://github.com/rstudio/shiny/blob/master/R/input-date.R获取)。
目前它是:
我把这句话作为回答,由于没有足够的声誉:(