Как я могу решить проблему часовых поясов на timevis R? - PullRequest
0 голосов
/ 15 января 2019

Мне нужно взять данные, возвращенные из 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>

1 Ответ

0 голосов
/ 27 января 2019

Прежде всего: поскольку вы используете смешанные форматы даты, второе событие отображается неправильно. В моем примере ниже я исправил это.

Поскольку сама временная шкала содержит даты в правильном часовом поясе, это просто проблема объекта, возвращаемого 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)

enter image description here

...