Come formattare la data in angularjs


143

Voglio formattare la data come mm/dd/yyyy. Ho provato quanto segue e nessuno di questi funziona per me. Qualcuno mi può aiutare con questo?

riferimento: ui-date

<input ui-date ui-date-format="mm/dd/yyyy" ng-model="valueofdate" /> 

<input type="date" ng-model="valueofdate" />

1
Hai provato a rimuovere del ui-date-format="mm/dd/yyyy"tutto? Sembra che il comportamento predefinito senza questa opzione sia quello che desideri.
Lukas,

Hai provato moment.js?
Cétia,

No, non ho provato moment.js. Il mio server mi restituisce la stringa Json 20140313T00: 00: 00. Ho provato in entrambi i modi il tipo di input html5 date e ui-date-format. La rimozione del formato ui-date dice che è una stringa che gli dà un formato.
user16

L'uso $formatterse $parsersper questa risposta ha risolto il mio problema simile.
Ross Rogers,

puoi usare i filtri in html e anche da javascript, fai riferimento a: stackoverflow.com/a/27615392/1904479
Kailas

Risposte:


204

Angular.js ha un filtro data incorporato.

dimostrazione

// in your controller:
$scope.date = '20140313T00:00:00';

// in your view, date property, filtered with date filter and format 'MM/dd/yyyy'
<p ng-bind="date | date:'MM/dd/yyyy'"></p>

// produces
03/13/2014

Puoi visualizzare i formati di data supportati nell'origine per il filtro data .

modifica :

Se stai cercando di ottenere il formato corretto nel datepicker (non è chiaro se stai usando datepicker o stai solo cercando di usare il suo formattatore), quelle stringhe di formato supportate sono qui: https://api.jqueryui.com/datepicker/


1
il server mi restituisce '20140313T00: 00: 00 e voglio mostrarlo nel formato mm / gg / aaaa in un input come questo - <input type = date "ng-model =" mydate ">
user16

Non sono sicuro del motivo per cui la mia risposta è stata sottoposta a downgrade. Questa risposta è presa quasi alla lettera dai documenti di Angular. La menzione delle stringhe di formato datepicker di jQueryUI è perché il modulo utilizzato nella domanda è ui-date che ha una dipendenza da jQuery e jQueryUI. Non c'è nulla di errato o fuorviante nella risposta.
Jim Schubert,

Non credo che il link dell'interfaccia utente jQuery sia corretto per le stringhe di formato. docs.angularjs.org/api/ng/filter/date sembra essere più preciso.
TrueWill

@TrueWill OP chiede specificamente di ui-date, che utilizza jQuery datepicker. Il primo link nel mio post si collega al codice sorgente che ha le stringhe di formato supportate da angolare.
Jim Schubert,

@JimSchubert questa è la mia stringa di data '2013-11-11 00:00:00' e non verrà convertita | data: 'longdate', qualche suggerimento?
alphapilgrim,

97

Se non si dispone di un campo di input, ma si desidera semplicemente visualizzare una data stringa con una formattazione corretta, è possibile semplicemente scegliere:

<label ng-bind="formatDate(date) |  date:'MM/dd/yyyy'"></label>

e nel file js usare:

    // @Function
    // Description  : Triggered while displaying expiry date
    $scope.formatDate = function(date){
          var dateOut = new Date(date);
          return dateOut;
    };

Questo convertirà la data in stringa in un nuovo oggetto data in javascript e visualizzerà la data nel formato MM / gg / aaaa.

Uscita: 15/12/2014

Modifica
Se si utilizza una data stringa del formato stringa "2014-12-19 20:00:00" (passato da un backend PHP), è necessario modificare il codice in quello in: https://stackoverflow.com / a / 27616348/1904479

Aggiunta ulteriore
Da JavaScript è possibile impostare il codice come:

$scope.eqpCustFields[i].Value = $filter('date')(new Date(dateValue),'yyyy-MM-dd');

nel caso in cui tu abbia già una data con te, altrimenti puoi usare il seguente codice per ottenere la data di sistema corrente:

$scope.eqpCustFields[i].Value = $filter('date')(new Date(),'yyyy-MM-dd');

Per maggiori dettagli sui formati di data, consultare: https://docs.angularjs.org/api/ng/filter/date


27

Sto usando questo e sta funzionando bene.

{{1288323623006 | date:'medium'}}: Oct 29, 2010 9:10:23 AM
{{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}: 2010-10-29 09:10:23 +0530
{{1288323623006 | date:'MM/dd/yyyy @ h:mma'}}: 10/29/2010 @ 9:10AM
{{1288323623006 | date:"MM/dd/yyyy 'at' h:mma"}}: 10/29/2010 at 9:10AM

questo non funziona per me, se passo un oggetto JS Date. qualche suggerimento perché?
Panshul,

Dovrebbe funzionare solo per il formato data in cui la data è in millisecondi e nel tuo caso la data è in Formato data. Segui: w3schools.com/js/js_date_formats.asp
Ravindra

18

Questo non è esattamente quello che stai chiedendo, ma potresti provare a creare un campo di immissione della data in HTML come qualcosa di simile:

<input type="date" ng-model="myDate" />

Quindi per stampare questo sulla pagina dovrai usare:

<span ng-bind="convertToDate(myDate) | date:'medium'"></span>

Infine, nel mio controller ho dichiarato un metodo che crea una data dal valore di input (che in Chrome è apparentemente analizzato 1 giorno di riposo):

$scope.convertToDate = function (stringDate){
  var dateOut = new Date(stringDate);
  dateOut.setDate(dateOut.getDate() + 1);
  return dateOut;
};

Così il gioco è fatto. Per vedere tutto funzionante vedere il seguente plunker: http://plnkr.co/edit/8MVoXNaIDW59kQnfpaWW?p=preview. Buona fortuna!


11

Questo funzionerà:

{{ oD.OrderDate.replace('/Date(','').replace(')/','') | date:"MM/dd/yyyy" }}

NOTA: una volta sostituiti questi, la data / millis rimanenti verranno convertiti in un foramt dato.


per qualche motivo il mio campo è in questo formato / Data (99999) / a, sai perché?
Antonio Correia,

9

vedi dateAPI angolare : API AngularJS: data


Il datefiltro angolare :

Uso:

{{ date_expression | date  [: 'format']  [: 'timezone' ] }}


exampe:

Codice:

 <span>{{ '1288323623006' | date:'MM/dd/yyyy' }}</span>

Risultato:

10/29/2010

7

Io uso il filtro

.filter('toDate', function() {
  return function(items) {
    return new Date(items);
  };
});

poi

{{'2018-05-06 09:04:13' | toDate | date:'dd/MM/yyyy hh:mm'}}

3

Basta passare il formato data UTC dal codice lato server al lato client

e usa la sintassi seguente -

 {{dateUTCField  +'Z' | date : 'mm/dd/yyyy'}}

 e.g. dateUTCField = '2018-01-09T10:02:32.273' then it display like 01/09/2018

1

Dopo aver esaminato tutte le soluzioni di cui sopra, la seguente è stata la soluzione più veloce per me. Se si utilizza materiale angolare:

 <md-datepicker ng-model="member.reg_date" md-placeholder="Enter date"></md-datepicker>

Per impostare il formato:

app.config(function($mdDateLocaleProvider) {
    $mdDateLocaleProvider.formatDate = function(date) {
        // Requires Moment.js OR enter your own formatting code here....
        return moment(date).format('DD-MM-YYYY');
    };
});

Modifica: devi anche impostare la parseDate per digitare una data (da questa risposta Cambia formato di md-datepicker in Materiale angolare )

$mdDateLocaleProvider.parseDate = function(dateString) {
    var m = moment(dateString, 'DD/MM/YYYY', true);
    return m.isValid() ? m.toDate() : new Date(NaN);
};

1
var app=angular.module('myApp',[]);
        app.controller('myController',function($scope){         
              $scope.names = ['1288323623006','1388323623006'];

        });

Qui il nome del controller è "myController" e il nome dell'app è "myApp".

<div ng-app="myApp" ng-controller="myController">
        <ul>
            <li ng-repeat="x in names">
                {{x | date:'mm-dd-yyyy'}}

            </li>

        </ul>
    </div>

Il risultato sarà simile al seguente: - * 10-29-2010 * 01-03-2013


0

Ok il problema sembra provenire da questa riga:
https://github.com/angular-ui/ui-date/blob/master/src/date.js#L106 .

In realtà questa linea è l'associazione con l'interfaccia utente di jQuery che dovrebbe essere il posto per iniettare il formato dei dati.

Come puoi vedere, var optsnon esiste alcuna proprietà dateFormatcon il valore di ng-date-format come potresti scegliere.

Comunque la direttiva ha una costante chiamata uiDateConfigper aggiungere proprietà a opts.

La soluzione flessibile (consigliata):

Da qui puoi vedere che puoi inserire alcune opzioni iniettando nella direttiva una variabile controller con le opzioni dell'interfaccia utente jquery.

<input ui-date="dateOptions" ui-date-format="mm/dd/yyyy" ng-model="valueofdate" />

myAppModule.controller('MyController', function($scope) {
    $scope.dateOptions = {
        dateFormat: "dd-M-yy"
    };
});

La soluzione hardcoded:

Se non si desidera ripetere questa procedura continuamente, modificare il valore di uiDateConfigin date.js in:

.constant('uiDateConfig', { dateFormat: "dd-M-yy" })

0

Ho avuto lo stesso problema e, come sopra, ho pensato che ci fosse un metodo nativo in JavaScript. Il fatto è che new Date(valueofdate)restituisce un oggetto Date.

Ma controlla in http://www.w3schools.com/js/js_date_formats.asp , la parte che dice zero iniziale. Una data da una stringa, ad esempio un'eco da PHP, deve essere simile a:

$valueofdate = date('Y-n-j',strtotime('theStringFromQuery'));

Questo passerà una stringa, ad esempio: '1999-3-3'e JavaScript eseguirà l'analisi di un oggetto con il formato giusto con

$scope.valueofdate = new Date(valueofdate);

<input ui-date ui-date-format="mm/dd/yyyy" ng-model="valueofdate" />
<input type="date" ng-model="valueofdate" />

Link a PHP per i formati di data: http://www.w3schools.com/php/func_date_date_format.asp .


0

ng-bind="reviewData.dateValue.replace('/Date(','').replace(')/','') | date:'MM/dd/yyyy'"

Utilizzare questo dovrebbe funzionare bene. :) I campi reviewData e dateValue possono essere modificati in base al resto del parametro può essere lasciato uguale


0
{{convertToDate  | date :  dateformat}}                                             
$rootScope.dateFormat = 'MM/dd/yyyy';

1
Perché pubblichi un commento con la stessa riga della tua risposta? E la tua risposta è solo un codice, nessuna spiegazione.
Pochmurnik,

-1
// $scope.dateField="value" in ctrl
<div ng-bind="dateField | date:'MM/dd/yyyy'"></div>
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.