So formatieren Sie das Datum in AngularJS


143

Ich möchte das Datum als formatieren mm/dd/yyyy. Ich habe folgendes versucht und nichts davon funktioniert für mich. Kann mir jemand dabei helfen?

Referenz: UI-Datum

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

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

1
Haben Sie versucht, ui-date-format="mm/dd/yyyy"ganz zu entfernen ? Es sieht so aus, als ob das Standardverhalten ohne diese Option das ist, was Sie wollen.
Lukas

Haben Sie moment.js ausprobiert?
Cétia

Nein, ich habe moment.js nicht ausprobiert. Mein Server gibt mir den Json-String 20140313T00: 00: 00 zurück. Ich habe versucht, in beide Richtungen HTML5-Eingabetyp Datum und UI-Datum-Format. Wenn Sie das UI-Datumsformat entfernen, wird angegeben, dass es sich um eine Zeichenfolge handelt. Geben Sie ihm ein Format.
Benutzer16

Die Verwendung von $formattersund $parsersgemäß dieser Antwort löste mein ähnliches Problem.
Ross Rogers

Sie können Filter sowohl in HTML als auch in Javascript verwenden. Weitere Informationen finden
Kailas

Antworten:


204

Angular.js verfügt über einen integrierten Datumsfilter.

Demo

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

Sie können die unterstützten Datumsformate in der Quelle für den Datumsfilter anzeigen .

bearbeiten :

Wenn Sie versuchen, das richtige Format im Datepicker zu erhalten (nicht klar, ob Sie den Datepicker verwenden oder nur den Formatierer verwenden), finden Sie diese unterstützten Formatzeichenfolgen hier: https://api.jqueryui.com/datepicker/


1
Der Server gibt mir '20140313T00: 00: 00' zurück und ich möchte in einer Eingabe wie dieser im Format MM / TT / JJJJ anzeigen - <input type = date "ng-model =" mydate ">
user16

Ich bin mir nicht sicher, warum meine Antwort abgelehnt wurde. Diese Antwort stammt fast wörtlich aus Angulars Dokumenten. Die Erwähnung von Zeichenfolgen im jQueryUI-Datepicker-Format erfolgt, weil das in der Frage verwendete Modul ui-date ist und von jQuery und jQueryUI abhängig ist. Die Antwort enthält nichts Falsches oder Irreführendes.
Jim Schubert

Ich denke nicht, dass der Link zur jQuery-Benutzeroberfläche für Formatzeichenfolgen korrekt ist. docs.angularjs.org/api/ng/filter/date scheint genauer zu sein.
TrueWill

@TrueWill OP fragt speziell nach ui-date, das jQuery datepicker verwendet. Der erste Link in meinem Beitrag verweist auf den Quellcode, dessen Formatzeichenfolgen von Angular unterstützt werden.
Jim Schubert

@ JimSchubert Dies ist meine Datumszeichenfolge '2013-11-11 00:00:00' und sie wird nicht konvertiert | Datum: 'Longdate', irgendwelche Vorschläge?
Alphapilgrim

97

Wenn Sie kein Eingabefeld haben, sondern nur ein Zeichenfolgendatum mit einer geeigneten Formatierung anzeigen möchten, können Sie einfach Folgendes auswählen:

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

und in der js-Datei verwenden Sie:

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

Dadurch wird das Datum in der Zeichenfolge in ein neues Datumsobjekt in Javascript konvertiert und das Datum im Format MM / TT / JJJJ angezeigt.

Ausgabe: 15.12.2014

Bearbeiten
Wenn Sie ein Zeichenfolgendatum im Format "2014-12-19 20:00:00" verwenden (von einem PHP-Backend übergeben), sollten Sie den Code in den folgenden Code ändern: https://stackoverflow.com / a / 27616348/1904479

Weiteres Hinzufügen
von Javascript können Sie den Code wie folgt einstellen:

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

Wenn Sie bereits ein Datum bei sich haben, können Sie den folgenden Code verwenden, um das aktuelle Systemdatum abzurufen:

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

Weitere Informationen zu Datumsformaten finden Sie unter: https://docs.angularjs.org/api/ng/filter/date


27

Ich benutze dies und es funktioniert gut.

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

Dies funktioniert bei mir nicht, wenn ich ein JS Date-Objekt übergebe. irgendwelche Vorschläge warum?
Panshul

Es sollte nur für das Datumsformat funktionieren, bei dem das Datum in Millisekunden angegeben ist, und in Ihrem Fall ist das Datum im Datumsformat. Folgen Sie: w3schools.com/js/js_date_formats.asp
Ravindra

18

Dies ist nicht genau das, wonach Sie fragen - aber Sie könnten versuchen, ein Datumseingabefeld in HTML zu erstellen, etwa:

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

Um dies dann auf der Seite zu drucken, die Sie verwenden würden:

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

Schließlich habe ich in meinem Controller eine Methode deklariert, die aus dem Eingabewert ein Datum erstellt (das in Chrome anscheinend 1 Tag später analysiert wird):

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

Da haben Sie es also. Um zu sehen, wie das Ganze funktioniert, sehen Sie den folgenden Plunker: http://plnkr.co/edit/8MVoXNaIDW59kQnfpaWW?p=preview. Viel Glück!


11

Das wird funktionieren:

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

HINWEIS: Sobald Sie diese ersetzen, wird das verbleibende Datum / Millis in das angegebene Forum konvertiert.


Aus irgendeinem Grund hat mein Feld dieses Format / Datum (99999) / bis. Weißt du warum?
Antonio Correia

9

siehe Winkel dateapi: AngularJS API: Datum


Der Winkelfilter date:

Verwendung:

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


Beispiel:

Code:

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

Ergebnis:

10/29/2010

7

Ich benutze Filter

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

dann

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

3

Übergeben Sie einfach das UTC-Datumsformat von Ihrem serverseitigen Code an die clientseitige

und verwenden Sie die folgende Syntax -

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

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

1

Nachdem ich mir alle oben genannten Lösungen angesehen hatte, war das Folgende die schnellste Lösung für mich. Wenn Sie eckiges Material verwenden:

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

So stellen Sie das Format ein:

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

Bearbeiten: Sie müssen auch das ParseDate für die Eingabe eines Datums festlegen (aus dieser Antwort ändern Sie das Format von md-datepicker in Angular Material ).

$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'];

        });

Hier lautet der Controller-Name "myController" und der App-Name "myApp".

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

            </li>

        </ul>
    </div>

Das Ergebnis sieht folgendermaßen aus: - * 29.10.2010 * 01.03.2013


0

Ok, das Problem scheint aus dieser Zeile zu stammen:
https://github.com/angular-ui/ui-date/blob/master/src/date.js#L106 .

Eigentlich ist diese Zeile die Bindung mit der jQuery-Benutzeroberfläche, an der das Datenformat eingefügt werden soll.

Wie Sie sehen können, var optsgibt es keine Eigenschaft dateFormatmit dem Wert aus dem ng-date-Format, wie Sie es sich vorstellen können.

Auf jeden Fall hat die Direktive eine Konstante, die aufgerufen wird uiDateConfig, um Eigenschaften hinzuzufügen opts.

Die flexible Lösung (empfohlen):

Von hier aus können Sie sehen, dass Sie einige Optionen einfügen können, die in die Direktive eine Controller-Variable mit den Optionen jquery ui einfügen.

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

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

Die fest codierte Lösung:

Wenn Sie diesen Vorgang nicht ständig wiederholen möchten, ändern Sie den Wert von uiDateConfigin date.js in:

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

0

Ich hatte das gleiche Problem und dachte wie in den obigen Kommentaren, dass es eine native Methode in JavaScript geben muss. Die Sache ist, new Date(valueofdate)ein Date-Objekt zurückzugeben.

Überprüfen Sie jedoch http://www.w3schools.com/js/js_date_formats.asp , den Teil, in dem die führende Null steht. Ein Datum aus einem String, zum Beispiel ein Echo aus PHP, muss wie folgt aussehen:

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

Dies übergibt zum Beispiel einen String: '1999-3-3'und JavaScript analysiert ein Objekt mit dem richtigen Format mit

$scope.valueofdate = new Date(valueofdate);

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

Link zu PHP für Datumsformate: http://www.w3schools.com/php/func_date_date_format.asp .


0

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

Verwenden Sie dies sollte gut funktionieren. :) Die Felder reviewData und dateValue können geändert werden, da Ihr Parameter rest gleich bleiben kann


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

1
Warum postest du einen Kommentar mit derselben Zeile wie in deiner Antwort? Und Ihre Antwort ist nur ein Code, überhaupt keine Erklärung.
Pochmurnik

-1
// $scope.dateField="value" in ctrl
<div ng-bind="dateField | date:'MM/dd/yyyy'"></div>
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.