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

时间:2015-10-20 13:26:07

标签: r shiny

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

如果我在本地运行此代码,在我的ubuntu服务器上运行rstudio或连接到运行此代码的闪亮服务器,它会显示前一天。

[1,2,3]

我发现了这个问题,In Shiny for R, why does Sys.Date() return yesterday's date inside a dateInput?和 with start = NULL,end = NULL我今天得到了正确的结果,但正如我昨天所需要的,这对我来说没有解决方案。

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

2015年10月21日更新

我感谢Oskar Forsmo建议在应用程序中获取系统(“日期”),这给了我正确的日期和时间。

它变得更加奇怪:

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){}
)

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

我要提供截图,因为我不相信自己。

wrong day in dateRangeInput, right in textOutput

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

要隔离错误,因为我在renderText中有正确的一天,在我的桌面触发的dateRangeInput对象的某个地方一定有问题吗?!

更新29.10.2015

我没有更改代码/服务器上的任何内容,但它现在显示正确的日期,不知道为什么但它今天起作用..如果有人知道为什么会发生这种情况我真的很感激。

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,原因是本地时区与服务器时区不同。当我将每个日期转换为POSIX日期(包括时区)时,我能够获得正确的日期。如果您希望闪亮显示由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')

答案 1 :(得分:0)

您需要使UI成为一个函数。闪亮的缓存是UI部分,因此它只是提取缓存的Sys.Date()。参见https://github.com/rstudio/shiny/issues/1882

您看到的日期通常是最后一次重新启动服务器的时间。

从上面的链接复制:

打开它:

ui <- fluidPage(...)

为此:

ui <- function(req) {
  fluidPage(...)
}