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

How can I set the date of moment.js object to the server date when parsing MS ASP.NET JSON Date?

注意:为清楚起见更新了问题

我有一个应用程序位于 EST 的服务器上。我正在使用带有 Entity Framework 6 和 jQuery DataTables to display my index pages. I'm using moment.js 的 MVC5 应用程序来解析 .NET JSON 日期。

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

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 中的区域,它只是 returns 一个奇数。有些是“03/31/2015 04:00:00”,有些是“03/31/2015 05:00:00”。

我现在不知道如何解决这个问题。我试着用简单的方法从日期中减去 12 小时,但是 returns '03/31/2015 04:00:00' 只减去 8 小时。

关于如何正确解决此问题的任何想法?我在这里错过了什么?

您可以使用 TotalHours 属性 of TimeSpan class 由 TimeZoneInfo.Local.GetUtcOffset(DateTime.UtcNow)

返回

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

在我的代码中,我使用 moment.js 格式化消息日期以显示为 "MM/DD/YYYY hh:mm",因为我们只需要那么高的准确性,并且想通过不在列上保存 space显示秒数和 "AM:PM." 但是,我没有将其设置为使用军​​事时间。因此,它显示的是“12:00:00 AM”的“12:00”部分,而不是我认为的 12:00 军事时间。这就是为什么即使我减去 12 小时,它仍然会显示 12,当我减去适当的 EST 偏移量时,它会显示 8:00PM 或 7:00PM(取决于 DST)。