2015-04-30 3 views
6

У меня есть Угловая коллекция, связанная с ретранслятором, который заполнен из MVC JsonResult.Convert C# DateTime To Angular Date

$scope.loadData = function() { 
     $http.get('/Product/GetDiscountCodes') 
      .then(function (result) { 
       console.log(result); 
       $scope.discountCodes = result.data.DiscountCodes; 
       $scope.selected = {}; 
      }); 
    }; 

Одно из полей в ретрансляторе заполнено датой. Дата возвращается от сервера C# DateTime, который выглядит следующим образом:

1/5/2015 12:02:00 AM

Однако, когда оно связано угловому это показывает, как это:

/Дата (1420434120000)/

Как я могу правильно отобразить дату в текстовом поле в формате mm/dd/yyyy?

Я пробовал формат даты ui-utils, но это не сработало.

Я также попытался создать свою собственную директиву, которая форматирует дату должным образом, но когда произойдет событие сохранения, отправляется дата-метод на стороне сервера.

 function inputDate() { 
    return { 
     require: 'ngModel', 
     link: function (scope, element, attrs, ngModelController) { 
      ngModelController.$parsers.push(function (data) { 
       if (data === null) { return null; } 
       var d = moment(data).format('YYYY-MM-DD'); 
       return d; 
      }); 

      ngModelController.$formatters.push(function (data) { 
       if (data === null) { return null; } 
       return moment(data).format('MM/DD/YYYY'); 
      }); 
     } 
    } 
} 
    angular.module('discountApp') 
    .directive('inputDate', inputDate); 

Спасибо за помощь!

+0

Это что-то вроде взлома, который Microsoft использует для получения даты. Я думаю, что они делают это, чтобы обойти раздражающие смещения UTC. Но в любом случае просто оцените функцию Date() в вашем сервисном вызове. Если вы не хотите его оценивать, вы можете использовать выдержку timestamp и использовать momentjs. Точка формирует данные в службе, прежде чем возвращать их другим службам или контроллерам. –

+0

В этих случаях я использую фильтр. Этот [ответ] (http://stackoverflow.com/a/26898454/2030565) использует фильтр _moment.js_. Мое использование выглядит так: ' {{myDate | jsonDate: «MM-dd-yyyy»}} ' – Jasen

ответ

8
var app = angular.module('app',[]); 
app.filter('ctime', function(){ 

    return function(jsonDate){ 

    var date = new Date(parseInt(jsonDate.substr(6))); 
    return date; 
    }; 

}); 
app.controller('fCtrl', function($scope){ 

    $scope.date = '/Date(1420875802707)/'; 

}); 
+3

Уход за разработкой? –

+0

Как использовать этот фильтр? использование | CTime? Это не помогло мне. Не могли бы вы рассказать? – Kurkula

2

Это, похоже, проблема с библиотекой сериализации, которую вы используете в .Net. Посмотрите на этом блоге Скотт Хансельман

http://www.hanselman.com/blog/OnTheNightmareThatIsJSONDatesPlusJSONNETAndASPNETWebAPI.aspx

Это говорит об этом самом вопросе. Дата должна быть сериализована как формат ISO 8601.

Вы, возможно, придется изменить свой сериалайзер смотрите здесь Setting the Default JSON Serializer in ASP.NET MVC

-1

используя код сценария: $filter('date')($scope.Your_DateTime_Model, 'MM/dd/yyyy')

с использованием вида кода: <input class="form-control" type="text" data-ng-model="Your_DateTime_Model | date:'MM/dd/yyyy'" />

7

использовать {sampledate.slice (6, -2) | date: 'dd/MM/yyyy'}