【问题标题】:Shiny: Why did the lubridate::today() function suddenly start returning a past date in a production deployment?Shiny:为什么 lubridate::today() 函数在生产部署中突然开始返回过去的日期?
【发布时间】:2025-12-16 23:50:02
【问题描述】:

我们使用 today() 函数来设置闪亮仪表板中日期选择输入的上限。

        dateRangeInput(inputId = ns("transactionDateRange"),
                       label = "Date Range",
                       max =  today(),
                       start = today() - 28,
                       end =  today())
      ),

今天(星期一)我在生产环境中打开 RStudio connect 中的仪表板,上限(“max”)设置为上周四的日期。 “开始”参数也返回上周四前 28 天。为什么前一天还没有问题的时候会发生这种情况?

【问题讨论】:

    标签: r shiny lubridate


    【解决方案1】:

    多么奇怪的行为...lubridate::today() 函数没有什么特别的作用,只是从基础 R 调用 Sys.time() 并将其格式化为指定时区中的日期。查看当前的source code

    Sys.time()documentation 说:

    Sys.time 和 Sys.Date 返回系统对当前日期的想法,无论是否包含时间。

    所以我认为首先您的生产环境的日期和时间可能存在一些问题。尝试在终端或 R 控制台中检查。

    (我认为日期和时间不太可能被缓存。)

    其他可能的情况:

    • 您的浏览器会记住输入中的最后一个选择 - 尝试从另一台计算机打开您的应用,
    • 该应用可能会有意保存一些 cookie/设置(但我认为 Shiny 默认不应该这样做,因此请检查您的应用代码或在另一台计算机上尝试)。

    【讨论】:

    • 感谢彼得的想法。如果有任何效果,我会通知您。
    • 事实证明,托管在同一台服务器上的另一个仪表板也有同样的问题,因此可能是您建议的环境日期和时间问题。