ASP.NET MVC Controller / Просмотр отображения местного времени - PullRequest
13 голосов
/ 16 ноября 2011

У меня есть приложение ASP.NET MVC, в котором хранится весь SQL DateTime в формате UTC, поэтому время остается неизменным независимо от часового пояса, с которого клиент обращается к сайту.

Теперь я хочу снова отобразить правильное время для пользователя, поэтому каждый раз, когда я отображаю время в своем просмотре, я использую:

timeVariable.ToLocalTime();

Однако .ToLocalTime () основан на сервере, а не на клиенте.

Нужно ли обрабатывать это в JavaScript на клиенте?

Я, вероятно, мог бы передать часовой пояс как часть запроса и заставить контроллер обрабатывать ошибку, но я предполагаю, что есть лучший способ сделать это. Или нет?

Заранее спасибо за любую помощь!

Матф

Ответы [ 3 ]

12 голосов
/ 01 декабря 2012

Для Asp.Net MVC + jQuery я создал DisplayTemplate и скрипт, чтобы помочь с этим.

Класс модели:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;

public class SampleModelWithDate
{
    [UIHint("UTCTime")]
    [DataType(DataType.DateTime)]
    public DateTime Date { get; set; }
}

DisplayTemplate: Views \ Shared \ DisplayTemplates \ UTCTime.cshtml

@model DateTime
<span class="UTCTime">@Model</span>

Добавить в Views \ Shared_Layout.cshtml или в ваш View:

<script>
    $(function () {
        // Determine timezone offset in milliseconds
        // from: http://www.w3schools.com/jsref/jsref_getTimezoneOffset.asp
        var d = new Date()
        var offsetms = d.getTimezoneOffset() * 60 * 1000;
        $('.UTCTime').each(function () {
            try
            {
                var text = $(this).html();

                var n = new Date(text);
                n = new Date(n.valueOf() - offsetms);

                $(this).html(n.toDateString() + " " + n.toLocaleTimeString());

                $(this).attr("Converted from UTC " + text);
            }
            catch (ex) {
                console.warn("Error converting time", ex);
            }
        });
    });
</script>

Конечно, немного почистите, это немного многословно, чтобы вы могли видеть, что происходит.

6 голосов
/ 16 ноября 2011

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

Я обнаружил, что многие решения, пытающиеся использовать javascript или обратный поиск по IP-адресу, подвержены сбоям и крайним случаям.

3 голосов
/ 16 октября 2015

В дополнение к ответу Деррика, Msgstr "Добавить 'UTC' к строке перед преобразованием ее в дату в javascript." Преобразование времени в формате UTC в местное время с использованием JavaScript

UTCTime можно автоматически преобразовать в местное время.

<script>
    $(function () {
        var d = new Date()
        $('.UTCTime').each(function () {
            try
            {
                var text = $(this).html() + ' UTC'; //Append ' UTC'

                var n = new Date(text);

                $(this).html(n.toDateString() + " " + n.toLocaleTimeString());

                $(this).attr("title", "Converted from UTC " + text);
            }
            catch (ex) {
                console.warn("Error converting time", ex);
            }
        });
    });
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...