Есть несколько решений, которые люди нашли для этого (например, здесь ), и все они имеют определенные преимущества.Поскольку вы хотите использовать его в качестве значения по умолчанию в 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)