Показывать дату / время клиента в ретрансляторе ASP.net, значение хранится в UTC - PullRequest
0 голосов
/ 24 января 2019

У меня есть запрос LINQ to Entities, и я загружаю ASP Repeater со списком файлов и когда они были загружены.Они показывают дату и время в формате UTC, но мне нужно, чтобы он отображал время клиента.

var files = db.Files
              .Where(f => f.IsAvailable == true && f.IsArchived == showTeamArchived && f.FileTypeID == 1 && f.ProjectID == projectid)
              .Select(f => new { f.ProjectID, f.UserID, f.FolderID, FileName = f.FileName.Replace(".sqlite", ""), FileID = f.FileID, f.AspNetUser.Email, f.DateCreated, f.LastUpdated, Status = f.IsArchived == true ? "Archived" : "" });

f.LastUpdated - это дата, которую я пытаюсь отформатировать.

<asp:Repeater ID="rptTeamFiles" runat="server">
   <ItemTemplate>
    <tr>
      <td><%#Eval("LastUpdated")%></td>
                                            ....

1 Ответ

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

Я смог выполнить это, когда событие повторителя OnPreRender было запущено для ретранслятора.Используя JavaScript-код Moment-Timezone, я перебираю пролеты с определенным классом и конвертирую дату / время в местный часовой пояс пользователя.

ASP.Net

protected void rptTeamFiles_OnPreRender(object sender, EventArgs e)
    {
        ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "localtime" + dtCount++, "<script>showLocalDateTime();</script>", false);
    }

Javascript

function showLocalDateTime() {

        var spans = document.getElementsByTagName('span');
        var l = spans.length;

        for (var i = 0; i < l; i++) {
            var spanClass = spans[i].getAttribute("class");
            if (spanClass == "localdatetime") {
                var utc = moment.tz(spans[i].innerHTML, "UTC");
                var local = utc.clone().tz(moment.tz.guess());
                spans[i].innerHTML = local.format('MMM Do YYYY, h:mm a');

            }
        }
    }
...