在shinyR用户界面自动更新我的dateRangeInput

在shinyR用户界面自动更新我的dateRangeInput,r,shiny-server,shiny,shinydashboard,R,Shiny Server,Shiny,Shinydashboard,我的Shinyr应用程序正在使用一个日期范围输入选择器,默认值为date range,介于昨天和15天前,但是当应用程序运行超过一天时,我希望默认日期范围会相应更新,我知道在服务器端可以调用invalidateLater,但是我不知道在应用程序的UI端可以做什么,UI端的dateRangeInput如下所示: dateRangeInput('dateRange',label = 'Date',start = Sys.Date() - 15, end = Sys.Date()-1) 好吧,我不知

我的Shinyr应用程序正在使用一个
日期范围输入
选择器,默认值为date range,介于昨天和15天前,但是当应用程序运行超过一天时,我希望默认日期范围会相应更新,我知道在服务器端可以调用
invalidateLater
,但是我不知道在应用程序的UI端可以做什么,UI端的
dateRangeInput
如下所示:

dateRangeInput('dateRange',label = 'Date',start = Sys.Date() - 15, end = Sys.Date()-1)

好吧,我不知道你为什么要在客户端这样做,但有一种方法。您可以在客户机上添加一个JavaScript,该JavaScript的作用与使用
invalidateLater
的任何构造完全相同。但这比服务器端版本更令人困惑

代码如下:

library(shiny)

ui <- shinyUI(fluidPage(
  dateRangeInput('dateRange',label = 'Date',start = Sys.Date() - 15, end = Sys.Date() - 1),
  tags$script(HTML("
    $(document).ready(function() {
      var initDate = new Date();

      setInterval(function() {
        var currentDate = new Date();
        if(currentDate.getDate() != initDate.getDate()) {
          initDate = currentDate;

          var start = new Date();
          start.setDate(currentDate.getDate() - 15);

          var end = new Date();
          end.setDate(currentDate.getDate() - 1);

          /* Insert Id of your dateRangeInput */
          var dateInput = $('#dateRange').find('input');
          dateInput.eq(0).datepicker('update', start);
          dateInput.eq(1).datepicker('update', end);
        };
      /* Insert interval in millis below. */
      }, 3600000);
    });
  "))
))

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

shinyApp(ui, server)
库(闪亮)
用户界面