2015-03-30 2 views
1

Примечание: Вопрос был обновлен для ясностиКак установить дату объекта moment.js на дату сервера при разборе MS ASP.NET JSON Date?

У меня есть приложение, которое находится на сервере в EST. Я использую приложение MVC5 с Entity Framework 6 и jQuery DataTables для отображения моих индексных страниц. Я использую moment.js для анализа даты .NET JSON.

Сервер расположен в EST, а пользователи - на EST. Однако всякий раз, когда я даю дату в jQuery DataTable, используя код ниже, я получаю дату плюс двенадцать часов. (Т.е. если на MS SQL Server поле 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 составляет только -5 от UTC, а не +12 часов. Я попытался изменить зону в moment.js, используя код выше, и он просто возвращает нечетное число. Некоторые из них будут '03/31/2015 04:00:00 ', а другие будут '03/31/2015 05:00:00'.

Я сейчас нахожусь в недоумении, как это решить. Я попытался сделать простой путь и просто вычитал 12 часов с даты, но это возвращает '03/31/2015 04:00:00 ', который вычитается всего за 8 часов.

Любые идеи о том, как я могу правильно это решить? Что мне здесь не хватает?

+0

будет ли это работать? https://msdn.microsoft.com/en-us/library/system.timezone.getutcoffset%28v=vs.110%29.aspx –

+0

Я попытался использовать его, но он не указан как известный метод класса TimeZone. Я ссылаюсь на систему, как говорится в документации. Итак, я действительно не уверен. –

+0

Некоторые смещения часового пояса не являются целым числом часов: [Список часовых поясов базы данных tz] (http://en.wikipedia.org/wiki/List_of_tz_database_time_zones). –

ответ

0

Так что я полагаю, что я нашел ответ на мою проблему, и это не имеет ничего общего с часовым поясом вообще.

В моем коде я форматировал дату сообщения, используя moment.js, чтобы отображать как "MM/DD/YYYY hh:mm", потому что нам нужна была только такая точность, и мы хотели сохранить место в столбце, не отображая секунды и «AM: PM». Однако я не собирался использовать военное время. Поэтому он показывал «12:00» часть «12:00:00 AM», не ссылаясь на 12 часов в военное время, как я думал. Вот почему, даже если я вычитал 12 часов, он все равно отобразил бы 12, и когда я вычитал соответствующее смещение EST, он отобразил бы 8:00 PM или 7:00 PM (в зависимости от DST).

1

Вы можете использовать TotalHours Собственость из TimeSpan класса, который returend по TimeZoneInfo.Local.GetUtcOffset(DateTime.UtcNow)