AngularJS: converti le date nel controller


114

Qualcuno potrebbe suggerirmi come convertire la data da questo 1387843200000formato in questo 24/12/2013 all'interno del mio controller ?

Per tua informazione, le mie date vengono memorizzate in questo modo e quando l'associazione per modificare il modulo con il input type="date"campo non viene affatto popolata.

#Plunker demo qui.

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 - modello

<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
Perché hai bisogno di convertire nel controller? È possibile utilizzare il filtro della data per formattare la data nella visualizzazione se è necessario solo un valore visualizzabile.
Justin Niessner

@JustinNiessner - le mie date vengono memorizzate in questo modo e quando l'associazione per modificare il modulo con il input type="date"campo non viene popolata
Iladarsda

1
Puoi utilizzare il filtro data e ora moment.js angularjs - github.com/urish/angular-moment
virender

Risposte:


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

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

Ma se utilizzi HTML5 type = "date", DEVE essere utilizzato il formato ISO aaaa-MM-gg.

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

NOTA: l'uso di pattern = "" con type = "date" sembra non standard, ma sembra funzionare nel modo previsto in Chrome 31.


Ciao, ho provato a implementare come suggerito, ma non funziona per me.
Mukun

Ciao, ho provato a implementare come suggerito, ma non funziona per me. la mia risposta dal servizio web primaverile è {"basicPersonalInfo": {"empNo": "04005001", "dob": 490645800000}, "communicationInfo": null}, ho bisogno di visualizzarlo nel mio campo di immissione data bootstrap / HTML5. Ho usato il filtro nel mio controller come $ scope.basicInfo = BasicInformationService.query (); $ scope.basicInfo. $ promise.then (function (data) {$ scope.basicInfo.basicPersonalInfo.dob = $ filter ('date') (data.basicPersonalInfo.dob, "yyyy-MM-dd");}); qualsiasi aiuto è apprezzato
Mukun

1
ok ho cambiato la formattazione nel mio controller in questo modo e sembra funzionare, non sono sicuro che sia il modo giusto. $ scope.basicInfo.basicPersonalInfo.dob = new Date ($ filter ('date') (data.basicPersonalInfo.dob, "yyyy-MM-dd"));
Mukun,

La mia data arriva in questo modo da API DateTime: "2017/12/15" ma in questo modo {{M.DateTime | data: 'dd-MM-yyyy'}} non cambia il formato della data. Come lo formatto all'interno dell'espressione?
Vishal Singh

16

crea un filter.js e puoi renderlo riutilizzabile

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

Visualizza

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

o nel controller

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

Filtraggio e formattazione della data in Angular js.


1
Sembra che ci sia già un filtro data integrato in AngularJS: docs.angularjs.org/api/ng/filter/date
AlikElzin-kilaka

1

Tutte le soluzioni qui non vincolano realmente il modello all'input perché dovrai cambiare di nuovo il dateAsStringper essere salvato come datenel tuo oggetto (nel controller dopo che il modulo verrà inviato).

Se non è necessario l'effetto vincolante, ma solo per mostrarlo nell'input,

un semplice potrebbe essere:

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

Quindi, se lo desideri, nel controller, puoi salvare la data modificata in questo modo:

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

attenzione: nel tuo controller, devi dichiarare la tua itemvariabile come $scope.itemaffinché funzioni.


1

suggerisco in Javascript:

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

e quindi date1 è una data.


Sì, hai ragione dove vogliamo convertire il nostro timestamp alla data
macha devendher
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.