2016-07-23 4 views
0

Я установил UTC. NET/JSON date from .net на стороне клиента. Когда я запускаю следующую команду:Преобразование момент UTC в Локальное время

moment(value.Planet.when).utc() 

Возвращенные даты из WebService:

"/Date(1469271646000)/" 

я получаю дату в параметре _d, показывающую текущую точную дату UTC с GMT + 0300 на правой стороне.

Я хочу преобразовать это время в местное время на машине пользователя, и что бы я ни делал, я всегда получаю время 3 часа назад.

Я делаю это:

moment(value.Planet.when).local().format('YYYY-MM-DD HH:mm:ss') 

и я получаю то же самое время, дату, как и UTC. Я не понимаю, как я могу получить momentjs, чтобы показать время UTC относительно местного времени. Я проверил, что объект momentjs действительно UTC.

Я думал, что если я передам функцию moment.utc() дату UTC, которую я получил из webservice (первоначально из базы данных), я могу просто запустить функцию local(), и я получу точный час относительно моей области, но это не сработало.

ответ

0

Не используйте имущество _d. Он предназначен только для внутреннего использования. См. this answer, the user guide, или Maggie's blog post on the subject.

Что касается вопроса о том, как конвертировать в местное время, вам фактически не нужно конвертировать. Вы уже разбор значения входного сигнала в локальном режиме, так что вы можете просто использовать его напрямую:

var m = moment("/Date(1469271646000)/"); // gives you a moment object in local mode. 
var s = m.format(); // lets you format it as a string. Pass parameters if you like. 
var d = m.toDate(); // gives you a Date object if you really need one 

Старайтесь избегать использования Date объектов, если они не требуют некоторых других элементов управления или библиотеками, которые вы используете. Большинство операций можно выполнить строго на объектах moment.

+0

Я просто положил новую запись, и я получаю вс 24 июля 2016 02:24:15 GMT + 0300, если я использую ваш код, но местное время - 5:24, но не 2:24. Вебсервис вернул «/ Дата (1469316255000) /» - так что я делаю неправильно. –

+0

Временная метка '1469316255000' соответствует' 2016-07-23T23: 24: 15.000Z'. Вы можете проверить это в чистом JS или на многих веб-сайтах, таких как [epochconverter.com] (http://www.epochconverter.com). Ваш результат отображается через три часа, потому что ваш местный часовой пояс для этого значения равен '+03: 00'. Если вы ожидаете, что это будет на три часа больше, я скажу, что ваш веб-сервис отправляет неверные данные. Возможно, вы дважды исправляете. –

+2

Например, если ваш back-end является .NET, если в базе данных есть значения, основанные на UTC, но не устанавливайте 'DateTimeKind.Utc' при их получении (используя' DateTime.SpecifyKind'), то они будут иметь ' DateTimeKind.Unspecified' по умолчанию. ASP.Net будет рассматривать те, которые будут * локальным временем * во время сериализации, и вычитает смещение локального часового пояса вашего сервера. –