Получить текущую дату и время пользователя в R / Shiny - PullRequest
0 голосов
/ 17 мая 2018

Я создаю блестящее приложение и размещаю его на сервере. Есть дата и время ввода. Значением по умолчанию является Sys.Date (). Теперь, когда пользователь получает к нему доступ, значением по умолчанию считается дата и время сервера, а не пользователи.

Пожалуйста, скажите мне, как я могу получить текущее время и дату пользователя и использовать их в качестве значений по умолчанию в моем поле ввода.

Текущий сценарий ввода:

dateInput("dateto", "Date To:", format = "mm/dd/yyyy", value = Sys.time()),
textInput("dateto_hour", "HH:MM",
                value = gsub("(.*):.*","\\1",format(Sys.time(), "%X")))

1 Ответ

0 голосов
/ 06 июня 2018

Есть несколько решений, которые люди нашли для этого (например, здесь ), и все они имеют определенные преимущества.Поскольку вы хотите использовать его в качестве значения по умолчанию в textInput, это решение, которое я выбрал для аналогичной необходимости, может вам пригодиться.Он включает чтение времени браузера клиента с использованием некоторого JS, назначение этого значения по умолчанию в textInput, а затем использование этого textInput позже на сервере.В моем приложении я использую это для отметки времени отправки данных от пользователя.

В пользовательском интерфейсе вам нужен следующий сценарий JS перед вашим textInput:

tags$script('
          $(document).ready(function(){
          var d = new Date();
          var target = $("#clientTime");
          target.val(d.toLocaleString());
          target.trigger("change");
          });
          '),
textInput("clientTime", "Client Time", value = "")

Как предложено вкомментарии session$userData могут использоваться для хранения специфичных для сеанса данных, таких как input$clientTime, для использования и манипулирования на сервере.Ниже приведено полное приложение, показывающее разницу между временем сервера и временем клиента, но вам, очевидно, потребуется опубликовать его на сервере, чтобы увидеть разницу.

library(shiny)

ui <- fluidPage(
  verbatimTextOutput("server"),
  tags$script('
          $(document).ready(function(){
          var d = new Date();
          var target = $("#clientTime");
          target.val(d.toLocaleString());
          target.trigger("change");
          });
          '),
  textInput("clientTime", "Client Time", value = ""),
  verbatimTextOutput("local")
)

server <- function(input, output, session) {

  output$server <- renderText({ c("Server time:", as.character(Sys.time()), as.character(Sys.timezone())) })
  session$userData$time <- reactive({format(lubridate::mdy_hms(as.character(input$clientTime)), "%d/%m/%Y; %H:%M:%S")})
  output$local <- renderText({session$userData$time() })


}

shinyApp(ui = ui, server = server)
...