2015-06-11 2 views
0
11-06-2015 12:44:30 

Мое datetime имеет вышеуказанный формат, однако он не преобразуется в Местное время, он дает мне месяц вместо ноября.Неправильно преобразовывается в местное время через moment.js

var check = moment('@Model.Invoice.InvoiceDate').format('YYYY-MM-DD HH:mm:ss'); 

        var localTime = moment.utc(check).toDate(); 
        localTime = moment(localTime).format('YYYY-MM-DD HH:mm:ss'); 

        console.log(localTime); 

White saving Я использую функцию DateTime.UTCNow для C# и получая данные, я использую следующий код.

Код:

var formatDate = new Date('@Model.Invoice.InvoiceDate.ToLocalTime()'); 
        console.log(formatDate); 
        formatDate = moment.utc(formatDate).toDate(); 
        console.log(formatDate); 
        var dateTime = moment(formatDate).format('lll'); 
        console.log(dateTime); 

Пример того, что происходит:

var formatDate = new Date('Sat Jun 13 2015 13:00:11 GMT+0530 (India Standard Time)'); 
          console.log(formatDate); 
          formatDate = moment.utc(formatDate).toDate(); 
          console.log(formatDate); 
          var dateTime = moment(formatDate).format('lll'); 
          console.log(dateTime); 
+0

Вы также можете решить эту проблему без moment.js, используя нативный метод JavaScript Object Date. Оформить эту ссылку --- http://praveenlobo.com/techblog/how-to-convert-javascript-local-date-to-utc-and-utc-to-local-date/ –

ответ

2

Вы можете распечатать дату в формате UTC ISO 8601 с ToString ("s"), но ей не хватает Z, поэтому вам нужно добавить ее самостоятельно.

var localTime = moment('@String.concat(Model.Invoice.InvoiceDate.ToString("s"), "Z")').format('lll');

Или, добавив Z на стороне клиента:

var localTime = moment('@Model.Invoice.InvoiceDate.ToString("s")' + 'Z').format('lll');

+0

My Object - это поле DateTime, а не строка – vini

+0

Вот почему есть ToString («s»), он преобразует вашу DateTime в строку DateString по стандарту ISO8601 и .NET. не хватает «Z», поэтому конкат добавляет его. –

+0

Могу ли я сделать что-то вроде этого: Convert.ToDateTime (string.Concat (DateTime.UtcNow.ToString ("s"), "Z")) – vini

1

Попробуйте

var check = moment('11-06-2015 12:44:30', 'DD-MM-YYYY HH:mm:ss') 
        .format('YYYY-MM-DD HH:mm:ss'); 

или в вашем случае это

var check = moment('@Model.Invoice.InvoiceDate', 'DD-MM-YYYY HH:mm:ss') 
        .format('YYYY-MM-DD HH:mm:ss'); 

вместо

var check = moment('@Model.Invoice.InvoiceDate') 
        .format('YYYY-MM-DD HH:mm:ss'); 

Отдавая Moments дату строку, которую нужно указать, какая часть к чему.

+0

Что делать, если изменяется формат времени? Теперь время моего сервера выглядит так: 6/12/2015 – vini

+0

, на каком языке на стороне сервера вы работаете? – yogi

+0

При сохранении я использую C#, поэтому я делаю DateTime.UTCNow – vini