사용자가 입력하고 자신의 시간대에 시간을 표시하고 제출을 위해 UTC로 변환하도록 허용 한 편집기 및 표시 템플릿이 여기에 있습니다.
올바른 디스플레이 및 편집기 템플릿을 선택하려면 UIHint 특성을 아래 표시된 각 모델의 UTC DateTime 필드에 대해 사용자 지정 값 "UTCTime"으로 설정해야합니다. 이 주석이없는 모델 날짜 시간은 영향되지 않습니다 :
[UIHint("UTCTime")]
[DataType(DataType.DateTime)]
public DateTime LastSeen { get; set; }
/Views/Shared/EditorTemplatesUTCTime.cshtml : 조회수 \
@model DateTime?
@{
var name = Html.GetFieldNameForModel(); // See the HTML extension at the end of this post
var boxName = name + ".Value";
var boxId = name + "_Value";
var divId = name + "_UTC";
}
@Html.TextBoxFor(m => m.Value, new { type = "datetime", onBlur ="$('#" + name + "').val(UTCDateFuncs.ToUTCDate($('#" + boxId + "').val()));$('#" + divId + "').html('UTC:' + $('#" + name + "').val());$('#" + boxId + "').attr('title','UTC:' + $('#" + name + "').val());" })<span id="@divId"></span>
<script>
new function() {
var utcVal = $('#@(boxId)').val();
$('#@(boxId)').val(UTCDateFuncs.FromUTCDate(utcVal));
$('#@(boxId)').attr('title', 'converted from UTC ' + utcVal);
}
</script>
@Html.HiddenFor(m=>m)
\ 공유 \ DisplayTemplates \ UTCTime.cshtml
@model DateTime?
@if(Model.HasValue){<span class="UTCTime">@Model</span>}
을
사이트 템플릿이나 어딘가에 필요한 자바 스크립트 :
// UTC Date
$(function() {
$('.UTCTime').each(function() {
var oldtext = $(this).html();
var result = UTCDateFuncs.FromUTCDate(oldtext);
$(this).html(result);
$(this).attr("title", "Converted from UTC " + oldtext);
});
});
var UTCDateFuncs = {
ToUTCDate: function (datetext) {
try {
var n = new Date(datetext);
offsetms = n.getTimezoneOffset() * 60 * 1000;
n = new Date(n.valueOf() + offsetms);
result = n.toDateString() + " " + n.toLocaleTimeString();
}
catch (ex) {
console.warn("Error converting time", ex);
}
return result;
},
FromUTCDate: function (datetext) {
var result;
try {
var n = new Date(datetext);
offsetms = n.getTimezoneOffset() * 60 * 1000;
n = new Date(n.valueOf() - offsetms);
result = n.toDateString() + " " + n.toLocaleTimeString();
}
catch (ex) {
console.warn("Error converting time", ex);
}
return result;
}
};
또한이 HTML 확장자 : \ Controllers \ Extensions \ HtmlExtensions도 사용합니다.CS
using System;
using System.Web.Mvc;
public static class HtmlExtensions
{
public static string GetFieldNameForModel<TModel>(this HtmlHelper<TModel> htmlHelper)
{
var ti = htmlHelper.ViewData.TemplateInfo;
var name = ti.HtmlFieldPrefix;
return name;
}
}
이것은 우리의 관리 페이지에 단독으로 사용되므로 에디터 상자에 변환의 결과를 보여줍니다 텍스트 상자 후하지 매우 사용자 친화적 인 범위가있다.
위의 행이 클라이언트 브라우저에서 실행되는 것으로 의심됩니다. 면도기 구문을 사용하면 코드가 서버에서 실행되고 클라이언트가 아닌 서버의 현지 시간대로 시간이 변환됩니다. 일부 순수한 자바 스크립트 또는 jquery 라이브러리가 구출 될 수 있습니다. – AKS
@AKS 답변을주의 깊게 읽으면 서버에서도 ** ** 최종 사용자 시간대 **를 알 수 있습니다. 그리고 그것을 사용하여 변환합니다. – astaykov