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

How to convert a C# list of DateTimes to local JS date?

本文关键字:JS 日期 转换 列表 DateTimes      更新时间:2023-09-26

我使用Razor语法循环浏览了一个视图上的C#DateTime列表,并绑定到该视图上的一个表。

在将值绑定到表之前,我需要做的是转换为浏览器的本地时间。从服务器传入的UpdatedTime处于UTC时区。

因此,在绑定到表之前,我需要以某种方式将Models.Escalation列表中的每个UpdatedTime属性转换为本地属性。

我确实尝试过调用@item.UpdatedTime.ToLocalTime(),但这会转换为服务器端的本地时间,即UTC不是浏览器本地时间

问题:

如何将DateTime的C#列表转换为客户端JS的本地列表?

我知道如何使用瞬间将单个DateTime值转换为本地值。但不确定我如何将其应用于完整的模型。升级列表:

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>

如果您也知道要转换的时区,那么您应该能够在服务器端实现这一点。

 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.");
    }

如果你不知道浏览器的时区,你可以使用以下jQuery和moment JS代码:

$(".td-limit").each(function () {
		var updatedTimeISO = moment.utc($(this).data('order')).toISOString();
		var updatedTimeLocal = moment(updatedTimeISO);
    $(this).text(updatedTimeLocal);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.14.1/moment.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
<tbody>
   <tr>  
     <td data-order="2013-05-02T21:01:26.0828604Z" class="td-limit"></td>
     <td data-order="2013-04-02T21:01:26.0828604Z" class="td-limit"></td>
     <td data-order="2013-03-02T21:01:26.0828604Z" class="td-limit"></td>
     <td data-order="2013-02-02T21:01:26.0828604Z" class="td-limit"></td>
     <td data-order="2013-01-02T21:01:26.0828604Z" class="td-limit"></td>
   </tr>
</tbody>
</table>