我使用Razor语法在视图上循环查看C#DateTime列表并绑定到视图上的表。
在将值绑定到表之前,我需要做的是转换为浏览器的本地时间。传入的UpdatedTime
是来自服务器的UTC时区。
因此,在绑定到表之前,我需要以某种方式将UpdatedTime
列表中的每个Models.Escalation
属性转换为本地。
我尝试调用@item.UpdatedTime.ToLocalTime()
,但这会转换为服务器端本地时间,即UTC。 不是浏览器的本地时间。
问题:
如何在客户端JS上将DateTime的C#列表转换为本地?
我知道如何使用片刻将单个DateTime值转换为本地。但不确定如何将其应用于完整的Models.Escalation列表:
var updatedTimeISO = moment.utc('@Model.UpdatedTime').toISOString();
var updatedTimeLocal = moment(updatedTimeISO);
@Model.UpdatedTime = updatedTimeLocal ;
将C#DateTime绑定到Razor视图中的表的表循环:
<tbody>
@foreach (Models.Escalation item in Model)
{
<tr>
<td data-order="@item.UnixTimeStamp" class="td-limit">@item.UpdatedTime.ToString("f")</td>
<td class="td-limit">@item.EventName</td>
</tr>
}
</tbody>
答案 0 :(得分:1)
如果您知道要转换的时区,您应该能够在服务器端完成此操作。
Sheets("Ref").Cells(o, 4).Value
如果您不知道浏览器时区,可以使用以下jQuery和时刻JS代码:
DateTime timeUtc = DateTime.UtcNow;
try
{
TimeZoneInfo cstZone = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");
DateTime cstTime = TimeZoneInfo.ConvertTimeFromUtc(timeUtc, cstZone);
Console.WriteLine("The date and time are {0} {1}.",
cstTime,
cstZone.IsDaylightSavingTime(cstTime) ?
cstZone.DaylightName : cstZone.StandardName);
}
catch (TimeZoneNotFoundException)
{
Console.WriteLine("The registry does not define the Central Standard Time zone.");
}
catch (InvalidTimeZoneException)
{
Console.WriteLine("Registry data on the Central Standard Time zone has been corrupted.");
}
$(".td-limit").each(function () {
var updatedTimeISO = moment.utc($(this).data('order')).toISOString();
var updatedTimeLocal = moment(updatedTimeISO);
$(this).text(updatedTimeLocal);
});