2013-11-21 20 views
93

Konnten mir bitte jemand vorschlagen, wie man das Datum von diesem 1387843200000 Format in dieses 24/12/2013in meinem Controller umwandelt?AngularJS - Datum in Controller konvertieren

Nur FYI meine Daten sind auf diese Weise & gespeichert, wenn die Bindung zum Bearbeiten von Formular mit input type="date" Feld überhaupt nicht ausgefüllt wird.

#Plunker demo here.

EditCtrl

app.controller("EditCtrl", [ "$scope", "$filter", "db" function ($scope, $filter, db){ 

    // this gets me an item object 
    var item = db.readItem(); 

    // item date = 1387843200000 
    // this returns undefined 
    item.date = $filter('date')(date[ item.date, "dd/MM/yyyy"]); 

}]); 

Edit.html - Vorlage

<form name="editForm" class="form-validate"> 

     <div class="form-group"> 
      <label for="date">Event date.</label> 
      <input type="date" class="form-control" ng-model="event.date" id="date" required /> 
     </div> 

     <a href="#/" class="btn btn-danger ">Cancel</a> 
     <button id="addEvent" class="btn btn-primary pull-right" ng-disabled="isClean() || editForm.$invalid" ng-click="saveEvent()">Save event.</button> 

    </form> 
+1

Warum müssen Sie in der Steuerung konvertieren? Sie können den Datumsfilter verwenden, um das Datum in Ihrer Ansicht zu formatieren, wenn Sie nur einen darstellbaren Wert benötigen. –

+0

@JustinNiessner - meine Daten werden auf diese Weise gespeichert & wenn die Bindung zum Bearbeiten von Form mit 'input type =" date "' Feld wird nicht ausgefüllt – Iladarsda

+1

Sie können moment.js angularjs Datum Zeit Filter verwenden - https://github.com/urish/angular-moment – virender

Antwort

188
item.date = $filter('date')(item.date, "dd/MM/yyyy"); // for conversion to string 

http://docs.angularjs.org/api/ng.filter:date

Wenn Sie jedoch HTML5 type = "date" verwenden, muss das ISO-Format yyyy-MM-dd verwendet werden.

item.dateAsString = $filter('date')(item.date, "yyyy-MM-dd"); // for type="date" binding 


<input type="date" ng-model="item.dateAsString" value="{{ item.dateAsString }}" pattern="dd/MM/YYYY"/> 

http://www.w3.org/TR/html-markup/input.date.html

HINWEIS: Verwendung von pattern = "" mit type = "date" Nicht-Standard sieht, aber es scheint 31 in der erwarteten Weise in Chrome zu arbeiten

+0

Danke. ISO-Format und Zeichenfolgenformat sind großartige Tipps. Ich werde darauf achten. – Iladarsda

+0

Hallo, ich habe versucht, wie vorgeschlagen zu implementieren, aber es funktioniert nicht für mich. – Mukun

+0

Hallo, ich habe versucht, wie vorgeschlagen zu implementieren, aber es funktioniert nicht für mich. Meine Antwort von spring webservice ist {"basicPersonalInfo": {"empNo": "04005001", "dob": 490645800000}, "communicationInfo": null}, ich muss es in meinem Bootstrap/HTML5 Datumseingabefeld anzeigen. Ich benutzte den Filter in meinem Controller wie \t $ scope.basicInfo = BasicInformationService.query(); \t \t \t $ scope.basicInfo. $ Promise.then (function (data) {\t \t \t \t \t $ scope.basicInfo.basicPersonalInfo.dob = $ Filter ('date') (data.basicPersonalInfo.dob „yyyy-MM -dd "); }); jede Hilfe wird geschätzt – Mukun

16

erstellen filter.js und Sie können dies machen als wiederverwendbare

angular.module('yourmodule').filter('date', function($filter) 
{ 
    return function(input) 
    { 
     if(input == null){ return ""; } 
     var _date = $filter('date')(new Date(input), 'dd/MM/yyyy'); 
     return _date.toUpperCase(); 
    }; 
}); 

Ansicht

<span>{{ d.time | date }}</span> 

oder in der Steuerung

var filterdatetime = $filter('date')(yourdate); 

Date filtering and formatting in Angular js.

+1

Es scheint, dass in AngularJS bereits ein Datumsfilter eingebaut ist: https://docs.angularjs.org/api/ng/filter/date –

+0

Danke! Das Verwenden des neuen Datums für mich hat den Trick gemacht. – butYouDontLookLikeADeveloper

1

Alle hier Lösungen wirklich das Modell an den Eingang nicht bindet, weil Sie die dateAsString wieder ändern müssen als date in Ihrem Objekt gespeichert werden (in der Controller nach dem Formular wird eingereicht).

<input type="date" value="{{ item.date | date: 'yyyy-MM-dd' }}" id="item_date" /> 

Dann, wenn Sie mögen, in der Steuerung Sie:

Wenn Sie die Bindungswirkung nicht brauchen, aber nur um es in der Eingabe zu zeigen,

ein einfaches sein könnte das bearbeitete Datum kann auf diese Weise sparen:

$scope.item.date = new Date(document.getElementById('item_date').value).getTime(); 

beachten: In Ihrem Controller müssen Sie Ihre item Variable als $scope.item deklarieren, damit dies funktioniert.

1

Ich schlage vor, in Javascript:

var item=1387843200000; 
var date1=new Date(item); 

und dann date1 ein Datum ist.

+0

Ja, dein Recht, wo wir unseren Zeitstempel bis heute konvertieren möchten –