我需要获取timevis返回的数据,但是这些数据返回的时间比输入的数据少一小时。我也尝试过更改R时区和服务器,但这并没有解决问题。 这是我要执行的操作的一个简单示例:
ui<-fluidPage(
mainPanel(
timevisOutput("gantt"),
tableOutput("return"),
actionButton("btn","btn")
)
)
server <- function(input, output, session) {
data <- data.frame(
id = 1:4,
content = c("Item one" , "Item two" ,"Ranged item", "Item four"),
start = c("2016-01-10 00:00:00", "2016-01-11T00:00:00.000Z", "2016-01-20", "2016-02-14 15:00:00"),
end = c(NA , NA, "2016-02-04", NA),
group =c(1,1,2,2)
)
output$gantt<-renderTimevis({
timevis(data= data,
groups = data.frame(id = 1:4, content = c(" 1", " 2", " 3", " 4")),
options = list(editable = list(add=FALSE, remove=TRUE, updateTime= TRUE, updateGroup=TRUE, overrideItems=TRUE), align = "left"))
})
observeEvent(input$btn,{
output$return<-renderTable(
print(input$gantt_data)
)
})
}
shinyApp(ui, server)
返回input$gantt_data
的结果是:
id content start group end
1 1 Item one 2016-01-09T23:00:00.000Z 1 <NA>
2 2 Item two 2016-01-10T23:00:00.000Z 1 <NA>
3 3 Ranged item 2016-01-19T23:00:00.000Z 2 2016-02-03T23:00:00.000Z
4 4 Item four 2016-02-14T14:00:00.000Z 2 <NA>
答案 0 :(得分:1)
首先:由于您使用混合日期格式,因此第二个事件无法正确显示。在下面的示例中,我对此进行了纠正。
由于时间轴本身包含正确时区中的日期,因此这只是input$gantt_data
返回的对象的问题。您可以通过先将其转换为POSIXct
对象,然后在所需的时区中显示它来进行手动更正:
library(timevis)
ui<-fluidPage(
mainPanel(
timevisOutput("gantt"),
tableOutput("return"),
actionButton("btn","btn")
)
)
server <- function(input, output, session) {
data <- data.frame(
id = 1:4,
content = c("Item one" , "Item two" ,"Ranged item", "Item four"),
start = c("2016-01-10 00:00:00", "2016-01-11 00:00:00.00", "2016-01-20", "2016-02-14 15:00:00"),
end = c(NA , NA, "2016-02-04", NA),
group =c(1,1,2,2)
)
output$gantt<-renderTimevis({
timevis(data= data,
groups = data.frame(id = 1:4, content = c(" 1", " 2", " 3", " 4")),
options = list(editable = list(add=FALSE, remove=TRUE, updateTime= TRUE, updateGroup=TRUE, overrideItems=TRUE), align = "left"))
})
observeEvent(input$btn,{
output$return<-renderTable({
dat <- input$gantt_data
dat$start <- format(as.POSIXct(input$gantt_data$start, format = "%Y-%m-%dT%H:%M:%S", tz = "UTC"), tz="Europe/Berlin")
dat$end <- format(as.POSIXct(input$gantt_data$end, format = "%Y-%m-%dT%H:%M:%S", tz = "UTC"), tz="Europe/Berlin")
print(dat)
})
})
}
shinyApp(ui, server)