Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 滚动条逐月输入_Javascript_R_Shiny - Fatal编程技术网

Javascript 滚动条逐月输入

Javascript 滚动条逐月输入,javascript,r,shiny,Javascript,R,Shiny,我正在写一篇有光泽的文章,想要一个日期滑块。我的数据中的日期是每月一次,我希望一次向前迈进一个月。滑块输入的值表示步长值为秒或天,具体取决于最小/最大参数类型。目前我有: sliderInput("slider", "Time", min=as.Date("2005-01-01"), max=as.Date("2014-12-01"), value=as.Date("2005-

我正在写一篇有光泽的文章,想要一个日期滑块。我的数据中的日期是每月一次,我希望一次向前迈进一个月。滑块输入的值表示步长值为秒或天,具体取决于最小/最大参数类型。目前我有:

sliderInput("slider", "Time", min=as.Date("2005-01-01"),
                              max=as.Date("2014-12-01"),
                              value=as.Date("2005-01-01"), step = 30,...)
我希望能够逐月而不是逐日,但从他们给我的东西来看,这似乎是不可能的。我是否可以添加一段js来实现这个功能

澄清说明:我已经阅读了此功能的文档,据我所知,此功能没有基本功能。测试时,“时间格式”参数仅更改标签,而不更改值。我看到过一些帖子访问某些小部件的值,我想知道这是否可能。(例如)


$(文档).ready(函数(){
变量滑块=$(“#滑块”).slider();
//覆盖默认的“nice”函数。
slider.nice=函数(值){
var参考日期=新日期(“2005-01-01”);
//每个滑块步长为1天,转换为24*3600*1000毫秒
var slider_date=新日期(ref_date.getTime()+值*24*3600*1000);
return[slider_date.getUTCFullYear(),
slider_date.getUTCMonth()+1,
slider_date.getUTCDate()]连接(“-”;
}
})

滑块put
中有一个
timeFormat
函数。欲了解更多信息,请访问

编辑:

为了找出日期并在以后的分析中使用它们,这个问题和罗兰提供的功能得到了很大的认可

rm(list=ls())
library(shiny)
monthStart <- function(x) {
  x <- as.POSIXlt(x)
  x$mday <- 1
  as.Date(x)
}
ui <- basicPage(sliderInput("slider", "Time", min = as.Date("2010-01-01"),max =as.Date("2014-12-01"),value=as.Date("2014-12-01"),timeFormat="%b %Y"),
                textOutput("SliderText")
                )
server <- shinyServer(function(input, output, session){

  sliderMonth <- reactiveValues()
  observe({
    full.date <- as.POSIXct(input$slider, tz="GMT")
    sliderMonth$Month <- as.character(monthStart(full.date))
  })
  output$SliderText <- renderText({sliderMonth$Month})
})
shinyApp(ui = ui, server = server)
rm(list=ls())
图书馆(闪亮)

monthStart这是我使用的解决方案,但首先我想解释一下逻辑:

  • 如上所述,
    sliderInput()
    函数的
    timeFormat
    参数没有提供所需的1个月步骤功能。相反,它只是格式化基础的每日数据,因此步进在每日增量中保持不变
  • sliderInput()
    有另一个参数
    step
    ,可用于显式定义步进增量。但是,它需要一个整数作为输入,因此不接受向量/范围。考虑到月份的长度不同,这里不适合使用单个整数。我尝试使用
    lubridate::months(1)
    lubridate::period(1,units=“months”)
    ——但不幸的是,这两种方法在应用程序渲染后都自动转换为30的整数,因此没有保留月增量
  • 我找到了一个使用
    shinyWidgets::slidertextireput()
    创建字符滑块的解决方案

    假设您的日期存储为表
    d
    Date
    列中的
    yyyy-mm-dd
    日期:

    sliderTextInput(
      inputId    = "myID",
      label      = "myLabel",
      choices    = as.yearmon(unique(d$Date)),
      selected   = c(as.yearmon(min(d$Date)), as.yearmon(max(d$Date))),
      grid       = TRUE,
      width      = "100%"
    )
    
    有了这个,你总是以每月递增的速度前进<使用code>as.yearmon()
    以便应用程序以
    MMM-YYYY
    格式显示滑块标签

    请记住,滑块输出是一个字符,因此需要将其反向转换为日期:

    • as.Date(as.yearmon(输入$myID[1]))
      作为开始
    • as.Date(as.yearmon(输入$myID[2]))
      表示结束

    为什么不使用
    dateInput
    控件?误读了您的问题:是否将更新我的答案以供参考month@MikeWise因为我想使用滑块提供的“动画”选项,所以这不会给我每月的步进功能。它仅将滑块上的标签更改为与“格式”参数等效。我对它进行了测试,如果提供的话,日期仍然是一步一步地向前推进,如果没有的话,日期仍然是一天一步地向前推进。@Marsenau——我和你有着完全相同的需求,需要一个滑块,一次推进一个月,让我高兴的是,在中找到了一个解决方案。@JoshO'Brien,我认为整个滑块都是用那个可怕的答案重新写的,我认为没有必要。我认为让
    shinny
    dev在他们的一个应用程序中添加此功能会更容易updates@PorkChop看起来像是's
    values=
    参数,它允许指定字符向量作为输入,它是我需要的关键位。据您所知,Shinny当前的输入滑块是否支持该选项?如果不支持,您建议我让Shinny开发人员实现的功能是什么?@PorkChop看起来已经有很多相关的请求,这两个请求都有,并且Ion.RangeSloider提供了所有选项。(通过来自的链接找到这两个)。
    sliderTextInput(
      inputId    = "myID",
      label      = "myLabel",
      choices    = as.yearmon(unique(d$Date)),
      selected   = c(as.yearmon(min(d$Date)), as.yearmon(max(d$Date))),
      grid       = TRUE,
      width      = "100%"
    )