如何将C#的DateTimes列表转换为本地JS日期?

时间:2016-08-04 14:37:23

标签: javascript c# asp.net-mvc razor foreach

我使用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>

1 个答案:

答案 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);
});