ASP.NET MVC Controller/Просмотр отображения по местному времени
У меня есть приложение ASP.NET MVC, которое хранит все SQL DateTime в UTC, так что время является постоянным, независимо от часового пояса, с которого клиент ударяет по сайту.
Теперь я хочу повторно отобразить правильное время для пользователя, поэтому в любое время, когда я показываю время в моем представлении, я использую:
timeVariable.ToLocalTime();
Однако .ToLocalTime() основан на сервере, а не на клиенте.
Нужно ли мне обрабатывать это в JavaScript на клиенте?
Я, вероятно, мог бы передать часовой пояс как часть запроса и контролировать контроллер, но я предполагаю, что есть лучший способ сделать это. Или нет?
Заранее благодарим за помощь!
Матф
Ответы
Ответ 1
Почти все сайты, которые я видел, которые переводят время в местное время, просят пользователя указать свой часовой пояс при создании учетной записи. Gmail - один из примеров, но есть много других.
Я обнаружил, что многие решения, пытающиеся использовать javascript или обратный поиск по IP-адресу, подвержены ошибкам и крайним случаям.
Ответ 2
Для Asp.Net MVC + jQuery я создал DisplayTemplate и script, чтобы помочь с этим.
Модельный класс:
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 или в ваш вид:
<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>
Почистите немного, конечно, немного подробней, чтобы вы могли видеть, что происходит.
Ответ 3
В дополнение к ответу Деррика,
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>