Shiny/DT:日期时间列的列和顶部筛选器显示错误值
Shiny/DT: column & top filter for datetime column show wrong values
我很难弄清楚为什么我的 列和日期时间列的筛选器 显示错误的日期和时间。
我的数据看起来像这样(dput
在下面的闪亮代码中):
DATUM NUMMER
1 2017-03-29 00:00:02 19
2 2017-03-29 00:00:36 20
3 2017-03-29 00:00:40 21
4 2017-03-29 00:00:44 22
5 2017-03-29 00:00:47 23
6 2017-03-29 00:00:51 24
7 2017-03-29 00:00:55 25
8 2017-03-29 00:00:59 26
9 2017-03-29 00:01:03 27
10 2017-03-29 00:01:07 28
如我们所见,没什么特别的。使用 DT
包以 shiny 显示此数据后,数据如下所示:
显示时差2小时,无故...
我的第一个方法是检查我的Sys.time()
> Sys.time()
[1] "2017-03-30 09:09:40 CEST"
这是正确的,第二种方法 是深入研究 DT
文档,在那里我找到了函数:formatDate(1, method = 'toLocaleString')
。我用过它,日期时间字段的显示似乎不错(见下图),但是顶部过滤器仍然显示错误的日期时间值...
这是可重现的例子:
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")
ui= fluidPage(
dataTableOutput("tab")
)
server= function(input, output,session) {
output$tab <- DT::renderDataTable({
datatable(data,rownames=TRUE, filter="top", class = 'cell-border stripe') %>%
formatDate(1, method = 'toLocaleString')})
}
shinyApp(ui, server)
正如我们在数据中看到的那样,min
日期时间值是 2017-03-29 00:00:02
,但是 datatable
的顶部过滤器显示 2017-03-28T22:00:02
,而 max
数据中的日期时间值为:2017-03-29 00:01:07
,顶部过滤器显示:2017-03-28T22:01:07
。
我将不胜感激任何帮助和解释,为什么 DT
包转换我的数据并以 2 小时的差异显示它,以及为什么在暗示函数 formatDate()
之后,过滤器仍然显示错误的值。
感谢帮助
noUISlider 的代码是here。在获取滑块的最小值和最大值时,所有日期似乎都被视为 UTC。
您可以将日期和时间转换为 UTC 时区中的相同日期和时间,以使滑块和您的日期保持一致:
data$DATUM <- as.POSIXct(as.character(data$DATUM), tz="UTC")
ui=fluidPage(
dataTableOutput("tab")
)
server= function(input, output,session) {
output$tab <- DT::renderDataTable({
datatable(data,rownames=TRUE, filter="top", class = 'cell-border stripe') %>%
formatDate(1, method = 'toISOString')})
}
shinyApp(ui, server)
移动滑块时,R 控制台中会出现时区不一致但过滤有效的警告。
我很难弄清楚为什么我的 列和日期时间列的筛选器 显示错误的日期和时间。
我的数据看起来像这样(dput
在下面的闪亮代码中):
DATUM NUMMER
1 2017-03-29 00:00:02 19
2 2017-03-29 00:00:36 20
3 2017-03-29 00:00:40 21
4 2017-03-29 00:00:44 22
5 2017-03-29 00:00:47 23
6 2017-03-29 00:00:51 24
7 2017-03-29 00:00:55 25
8 2017-03-29 00:00:59 26
9 2017-03-29 00:01:03 27
10 2017-03-29 00:01:07 28
如我们所见,没什么特别的。使用 DT
包以 shiny 显示此数据后,数据如下所示:
显示时差2小时,无故...
我的第一个方法是检查我的Sys.time()
> Sys.time()
[1] "2017-03-30 09:09:40 CEST"
这是正确的,第二种方法 是深入研究 DT
文档,在那里我找到了函数:formatDate(1, method = 'toLocaleString')
。我用过它,日期时间字段的显示似乎不错(见下图),但是顶部过滤器仍然显示错误的日期时间值...
这是可重现的例子:
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")
ui= fluidPage(
dataTableOutput("tab")
)
server= function(input, output,session) {
output$tab <- DT::renderDataTable({
datatable(data,rownames=TRUE, filter="top", class = 'cell-border stripe') %>%
formatDate(1, method = 'toLocaleString')})
}
shinyApp(ui, server)
正如我们在数据中看到的那样,min
日期时间值是 2017-03-29 00:00:02
,但是 datatable
的顶部过滤器显示 2017-03-28T22:00:02
,而 max
数据中的日期时间值为:2017-03-29 00:01:07
,顶部过滤器显示:2017-03-28T22:01:07
。
我将不胜感激任何帮助和解释,为什么 DT
包转换我的数据并以 2 小时的差异显示它,以及为什么在暗示函数 formatDate()
之后,过滤器仍然显示错误的值。
感谢帮助
noUISlider 的代码是here。在获取滑块的最小值和最大值时,所有日期似乎都被视为 UTC。
您可以将日期和时间转换为 UTC 时区中的相同日期和时间,以使滑块和您的日期保持一致:
data$DATUM <- as.POSIXct(as.character(data$DATUM), tz="UTC")
ui=fluidPage(
dataTableOutput("tab")
)
server= function(input, output,session) {
output$tab <- DT::renderDataTable({
datatable(data,rownames=TRUE, filter="top", class = 'cell-border stripe') %>%
formatDate(1, method = 'toISOString')})
}
shinyApp(ui, server)
移动滑块时,R 控制台中会出现时区不一致但过滤有效的警告。