2015-12-18 3 views
0

Я ВОССТАНОВЛЕНИЕ поле DateTime из базы данных с помощью JSON в следующий синтаксис строки:разница часовых поясов в браузерах

2015-12-17T12:00:00 

преобразовать его в дату, как показано ниже:

<script> 
    var myDate = new Date("2015-12-17T12:00:00"); 
    document.write(myDate); 
</script> 

Проблема заключается в том, что Safari и Chrome предполагают, что это время UTC (это так, как я этого хочу), и IE предполагает, что это местное время.

Пример вывод из Chrome/Safari:

Thu Dec 17 2015 17:30:00 GMT+0530 (India Standard Time) 

Пример вывод из IE Края/11/10

Thu Dec 17 2015 12:00:00 GMT+0530 (India Standard Time) 

См Plunker здесь: http://plnkr.co/edit/tQAqmdWAuL8k0vGKPLCx?p=preview

Как я могу исправить это поведение?

ответ

1

Nevermind, я нашел решение. Добавить «Z» в конце дня:

015-12-17T12:00:00Z 
+1

Это правильно, хотя лучшим решением будет иметь фоновым включают Z во время сериализации. Большинство сериализаторов будут делать это при правильной настройке. Если вы дадите некоторые сведения о контенте, я могу предложить советы о том, как это сделать правильно. –

+0

Мы используем ASP.Net Web API для возврата объектов C#. Объекты заполняются из базы данных с помощью Dapper. – navigator

+1

По мере того как вы загружаете объекты 'DateTime' из базы данных, они, вероятно, будут иметь свойство' .Kind', установленное 'DateTimeKind.Unspecified' по умолчанию. Если они действительно соответствуют терминам UTC, используйте 'DateTime.SpecifyKind' для установки' DateTimeKind.Utc' сразу при загрузке. Вы можете делать это вручную каждый раз или настраивать 'TypeHandler' в dapper, чтобы сделать это за вас. В качестве альтернативы, сохраните 'datetimeoffset' в SQL и используйте тип' DateTimeOffset' в .NET (со смещением, установленным на '+00: 00' для UTC). В любом случае, после завершения сериализации в JSON.net правильно добавьте 'Z' или смещение. –

0

Попробуйте это:

<script> 
    var myDate = new Date("2015-12-17T12:00:00").toUTCString(); 
    document.write(myDate); 
</script> 
+0

@navigator Я не могу проголосовать, но да, ваше решение будет работать. :) (Y) –

+0

Вы преобразовываете обратно в строку. Я не могу этого сделать, поскольку мне нужно выполнить дальнейшие операции с переменной datetime. – navigator

+0

Да, это было в моем сознании, но я нашел это решение, которое дается вами после размещения моего. Нет проблем, ваше решение лучше в вашем случае. –

Смежные вопросы