在解析MS ASP.NET JSON Date时,如何将moment.js对象的日期设置为服务器日期?

时间:2015-03-30 19:15:44

标签: c# asp.net .net datetime momentjs

注意:问题已更新为清晰

我有一个位于EST服务器上的应用程序。我正在使用带有Entity Framework 6和jQuery DataTables的MVC5应用程序来显示我的索引页面。我使用moment.js来解析.NET JSON日期。

服务器位于EST,用户都在EST上。但是,每当我使用下面的代码在jQuery DataTable上呈现日期时,我都会得到12个小时的日期。 (即,如果在MS SQL Server上的DATETIME字段是&00; 03/31/2015 00:00:00',它将显示' 03/31/2015 12:00:00&# 39。)

localOutput.Append(column.ColumnType == "DateTime" ? "\"render\": function( data, type, row ) { if (data) { return moment(data).zone(" + TimeZoneInfo.Local.GetUtcOffset(DateTime.UtcNow) + ").format(\"MM/DD/YYYY" + (column.Name == "Date" ? " hh:mm" : (column.Name == "Timestamp" ? " hh:mm:ss" : "")) + "\"); } else { return null; }}, " : "");

最初,我问如何获得UTC偏移,认为错误是因为它正在从UTC转换为本地时间并添加差异。但是,EST距离UTC仅为-5,而不是+12小时。我尝试使用上面的代码在moment.js中更改区域,它只返回一个奇数。有些人会在2015年3月31日04:00:00'和其他人将在03:03/31/205 05:00:00'。

我现在对如何解决这个问题感到茫然。我试着采取简单的方法,从日期开始减去12小时,但是返回时间为2015年3月31日04:00:00',这只减去8小时。

有关如何妥善解决此问题的任何想法?我在这里缺少什么?

2 个答案:

答案 0 :(得分:1)

您可以使用TotalHours

返回的TimeSpan类的TimeZoneInfo.Local.GetUtcOffset(DateTime.UtcNow)属性

答案 1 :(得分:0)

所以我相信我找到了问题的答案,而且它与时区无关。

在我的代码中,我使用moment.js格式化消息日期以显示为"MM/DD/YYYY hh:mm",因为我们只需要那么高的准确度,并希望通过不显示秒和“AM:PM”来节省列上的空间。 “但是,我没有把它用于军事时间。因此,它显示的是“12:00:00 AM”的“12:00”部分,而不是指我所认为的军事时间的12:00时。这就是为什么即使我减去12小时,它仍会显示12,当我减去适当的EST偏移时,它将显示在晚上8:00或晚上7:00(取决于夏令时)。