Sys.Date() 在闪亮的应用程序中显示错误的日期

Seb*_*ian 5 r shiny

此代码应向我显示昨天作为开始和结束日期,并以今天作为最后一个选项。它工作了几个月,我没有改变任何东西,但几周以来我得到了错误的日期。

它显示了我前天是否在本地运行此代码、在我的 ubuntu 服务器上运行此代码或连接到运行此代码的闪亮服务器。

Sys.setenv(TZ='GMT')

shinyApp(
  ui <- basicPage(
    dateRangeInput("daterange", "Daterange",start = Sys.Date()-1
                   ,end = Sys.Date()-1,max=Sys.Date())
  ),
  server <- function(input,output){}
)
Run Code Online (Sandbox Code Playgroud)

我发现这个问题,In Shiny for R, Why does Sys.Date() return Tuesday's date inside a dateInput? ,并且 start=NULL,end=NULL 我今天得到了正确的结果,但由于我昨天需要,这对我来说不是解决方案。

如果我在控制台中运行 Sys.Date() ,它会在本地和服务器上为我提供正确的日期。仅当我将其作为闪亮的应用程序运行时才会出现此问题。


更新2015年10月21日

感谢奥斯卡·福斯莫(Oskar Forsmo)在应用程序中获取系统(“日期”)的建议,我尝试了一些,这给了我正确的日期和时间。

事情变得更加奇怪:

library(shiny)

values <- reactiveValues()

shinyApp(
  ui <- basicPage(
    uiOutput("timerange"),
    textOutput( "today" )

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

    isolate(values$day <- Sys.Date())

    output$today <- renderText({
      as.character(values$day-1)
    })

   output$timerange <- renderUI({ dateRangeInput("daterange", "Daterange",start = values$day-1
                   ,end = values$day-1,max=values$day) })

  })
Run Code Online (Sandbox Code Playgroud)

在输出对象“今天”中,我有正确的日期,在 uiOutput“时间范围”中,我有错误的日期,它再次显示前天。

我会提供屏幕截图,因为我自己都不敢相信。

dateRangeInput 中的日期错误,textOutput 中的日期正确

最重要的是,在闪亮的服务器上运行的应用程序向我的一些同事显示了正确的时间/日期,而有些同事则得到了相同的错误日期。

为了隔离错误,因为我在 renderText 中有正确的日期,所以由我的桌面触发的 dateRangeInput 对象一定存在问题?!


更新2015年10月29日

我没有更改代码/服务器上的任何内容,但它现在显示了正确的日期,不知道为什么,但从今天开始它就可以工作了..如果有人知道为什么会发生这种情况,我真的很高兴知道。

小智 3

我遇到了同样的问题,这是由于本地时区与服务器时区不同。当我将每个日期转换为 POSIX 日期(包括时区)时,我能够获得正确的日期。如果你想让shiny显示由创建的原始格式Sys.Date(),你还必须使用该format参数。

这是工作代码:

dateRangeInput("daterange", "Daterange", start = as.POSIXct(Sys.Date()-1),
              end = as.POSIXct(Sys.Date()-1), max = as.POSIXct(Sys.Date())),
              format = 'yyyy-mm-dd')
Run Code Online (Sandbox Code Playgroud)