You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R Shiny的DataTables中设置24小时制时间格式

解决DT中toLocaleString显示12小时制的问题

我太懂这种被日期时间格式折腾的痛苦了!之前用toLocaleString去掉ISO时间里的'T'和'Z',结果又碰到12小时制的坑,确实头疼。

问题根源在于toLocaleString的默认行为——它会遵循浏览器的区域设置,Chrome里如果你的系统区域默认是12小时制,就自动显示AM/PM。不过我们可以通过传入配置选项强制改成24小时制。

只需要在formatDate里添加params参数,指定hour12: false即可,修改后的完整代码如下:

library(shiny)
library(DT)

data <- structure(
  list(
    DATUM = structure(
      c(1490738402, 1490738436, 1490738440, 1490738444, 1490738447, 
        1490738451, 1490738455, 1490738459, 1490738463, 1490738467), 
      class = c("POSIXct", "POSIXt"), tzone = "CEST"
    ), 
    NUMMER = c(19, 20, 21, 22, 23, 24, 25, 26, 27, 28)
  ), 
  .Names = c("DATUM", "NUMMER"), 
  row.names = c(NA, 10L), 
  class = "data.frame"
)

tz <- Sys.timezone()
data$DATUM <- as.POSIXct(as.character(data$DATUM), tz=tz)

ui <- fluidPage(
  dataTableOutput("tab")
)

server <- function(input, output, session) {
  output$tab <- DT::renderDataTable({ 
    datatable(data, rownames=TRUE, filter="top", class = 'cell-border stripe') %>% 
      # 关键修改:添加params参数指定24小时制
      formatDate(
        1, 
        method = 'toLocaleString',
        params = list(options = list(hour12 = FALSE))
      )
  })
}

shinyApp(ui, server)

简单说明

  • toLocaleString支持传入配置选项,其中hour12: false会强制启用24小时制显示
  • 这个配置不会破坏原本去掉'T'和'Z'的功能,依然能把ISO格式时间转成友好的本地格式

运行后你的DataTables就会显示预期的24小时制时间啦!

内容的提问来源于stack exchange,提问作者Mark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:27:16