2015-04-30 11 views
6

Ich habe eine Angular-Sammlung an einen Repeater gebunden, die von einem MVC JsonResult aufgefüllt wird.Konvertieren von C# DateTime in Angular Date

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

Eines der Felder im Repeater ist mit dem Datum gefüllt. Das Datum vom Server zurückgegeben wird, ist C# Datetime, die wie folgt aussieht:

1/5/2015 12:02:00 AM

jedoch, wenn es von Angular ist Displays wie folgt gebunden ist:

/Datum (1420434120000)/

Wie kann ich das Datum korrekt in meinem Textfeld im Format MM/TT/JJJJ anzeigen lassen?

Ich versuchte das ui-utils Datumsformat, aber das hat nicht funktioniert.

Ich habe auch versucht, meine eigene Direktive zu erstellen, die das Datum richtig formatiert, aber wenn das Speichern Ereignis passiert, ist das Datum, das an die serverseitige Methode gesendet wird, aufgebockt.

 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); 

Dank für die Hilfe!

+0

Das ist ein bisschen ein Hack, dass Microsoft verwendet, um das Datum zu erhalten. Ich denke, sie tun das, um die lästigen UTC-Offsets zu umgehen. Aber evaluiere die Funktion Date() in deinem Service-Call. Wenn Sie es nicht auswerten möchten, können Sie den Zeitstempel extrahieren und momentjs verwenden. Punkt ist, dass Daten in den Dienst einfließen, bevor sie an andere Dienste oder Controller zurückgegeben werden. –

+0

Ich benutze einen Filter in diesen Fällen. Diese [Antwort] (http://stackoverflow.com/a/26898454/2030565) verwendet einen _moment.js_ Filter. Meine Verwendung sieht folgendermaßen aus: ' {{myDate | jsonDate: "MM-TT-JJJJ"}} ' – Jasen

Antwort

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

Pflege um zu erarbeiten? –

+0

Wie verwenden wir diesen Filter? mit | ctime? Es hat nicht für mich funktioniert. Könnten Sie bitte etwas ausarbeiten? – Kurkula

-1

Code Skript: $filter('date')($scope.Your_DateTime_Model, 'MM/dd/yyyy')

Codeansicht mit: <input class="form-control" type="text" data-ng-model="Your_DateTime_Model | date:'MM/dd/yyyy'" />

7

verwenden, um die {sampledate.slice (6, -2) | Datum: 'TT/MM/JJJJ'}

Verwandte Themen