Angularjs - zeigt das aktuelle Datum an

128

Ich habe eine Ansicht in anglejs und versuche nur, das aktuelle Datum anzuzeigen (formatiert). Ich dachte, so etwas <span>{{Date.now() | date:'yyyy-MM-dd'}}</span>sollte das aktuelle Datum anzeigen.

Evo_x
quelle
Es würde ... aber es weiß es nicht Date.now().
Putvande
2
Also muss ich zuerst die Variable im Controller generieren? Ich dachte, etwas Einfaches wie das aktuelle Datum wäre einfacher :)
Evo_x
1
Date.now()ist NodeJS-Funktion
Nein,

Antworten:

229

Sie müssen zuerst ein Datumsobjekt in Ihrem Controller erstellen:

Regler:

function Ctrl($scope)
{
    $scope.date = new Date();
}

Aussicht:

<div ng-app ng-controller="Ctrl">
    {{date | date:'yyyy-MM-dd'}}
</div>

JSFiddle-Beispiel

Winkeldatumsfilter Art.-Nr.

Faultier
quelle
hi @sloth Ich möchte cgi zum Anzeigen der aktuellen Systemzeit verwenden. Wie kann ich das möglicherweise tun oder ist es möglich? Danke
bleyk
44

Sie können dies auch mit einem Filter tun, wenn Sie nicht jedes Mal, wenn Sie das Datum drucken möchten, ein Datumsobjekt an den aktuellen Bereich anhängen müssen:

.filter('currentdate',['$filter',  function($filter) {
    return function() {
        return $filter('date')(new Date(), 'yyyy-MM-dd');
    };
}])

und dann aus Ihrer Sicht:

<div ng-app="myApp">
    <div>{{'' | currentdate}}</div>
</div>
Nick G.
quelle
5
Er kann dann auch eine Anweisung machen
arg20
23

Vorlage

<span date-now="MM/dd/yyyy"></span>

Richtlinie

.directive('dateNow', ['$filter', function($filter) {
  return {
    link: function( $scope, $element, $attrs) {
      $element.text($filter('date')(new Date(), $attrs.dateNow));
    }
  };
}])

Da Sie Datein einer Vorlage (für eine Inline-Lösung) nicht direkt auf das Objekt zugreifen können, habe ich mich für diese Richtlinie entschieden. Es hält auch Ihre Controller sauber und ist wiederverwendbar.

flori
quelle
19

Nun, Sie können es mit Schnurrbart Ausdruck ( {{Date.now() | date:'dd.MM.yyyy HH:mm:ss'}}) tun . Sie müssen das Date-Objekt nur dem Bereich zuweisen, in dem Sie diesen Ausdruck auswerten möchten.

Hier ist ein Beispiel für jsfiddle: jsfiddle

Erwarten Sie jedoch nicht, dass der Wert automatisch aktualisiert wird. Dieser Wert wird nicht von Angular überwacht, daher müssen Sie jedes Mal einen Digest auslösen, wenn Sie ihn aktualisieren möchten (z. B. nach $ -Intervall). Dies ist eine Verschwendung von Ressourcen (und in Dokumenten auch nicht "empfohlen"). Natürlich können Sie die Kombination mit Direktiven / Controllern verwenden, um nur mit dem untergeordneten Bereich herumzuspielen (es ist immer kleiner als zum Beispiel rootScope und Digest ist schneller).

JakubKnejzlik
quelle
9

Nur meine 2 Cent für den Fall, dass jemand darauf stößt :)

Was ich hier vorschlage, hat das gleiche Ergebnis wie die aktuelle Antwort. Es wurde jedoch empfohlen, Ihren Controller so zu schreiben, wie ich es hier erwähnt habe.

Referenz scrollen Sie zum ersten "Hinweis" (Entschuldigung, es gibt keinen Anker)

Hier ist der empfohlene Weg:

Regler:

var app = angular.module('myApp', []);   
app.controller( 'MyCtrl', ['$scope', function($scope) {
    $scope.date = new Date();
}]);

Aussicht:

<div ng-app="myApp">
  <div ng-controller="MyCtrl">
    {{date | date:'yyyy-MM-dd'}}
  </div>
</div>
Herr H.
quelle
2

Sie können moment()und verwendenformat() Funktionen in AngularJS verwenden.

Regler:

var app = angular.module('demoApp', []);   
app.controller( 'demoCtrl', ['$scope', '$moment' function($scope , $moment) {
$scope.date = $moment().format('MM/DD/YYYY');
}]);

Aussicht:

<div ng-app="demoApp">
  <div ng-controller="demoCtrl">
    {{date}}
  </div>
</div>
nari_atyachari
quelle
2
<script type="text/javascript">
var app = angular.module('sampleapp', [])
app.controller('samplecontrol', function ($scope) {
   var today = new Date();
   console.log($scope.cdate);
   var date = today.getDate();
   var month = today.getMonth();
   var year = today.getFullYear();
   var current_date = date+'/'+month+'/'+year;
   console.log(current_date);
});
</script>
nallapagan nallapagan
quelle
1

Hier ist das Beispiel Ihrer Antwort: http://plnkr.co/edit/MKugkgCSpdZFefSeDRi7?p=preview

<span>Date Of Birth: {{DateOfBirth | date:"dd-MM-yyyy"}}</span>
<input type="text" datepicker-popup="dd/MM/yyyy" ng-model="DateOfBirth" class="form-control" />

und dann in der Steuerung:

$scope.DateOfBirth = new Date();
Mohaimin Moin
quelle
1

Aussicht

<div ng-app="myapp">
{{AssignedDate.now() | date:'yyyy-MM-dd HH:mm:ss'}}
</div>

Regler

var app = angle.module ('myapp', [])

app.run(function($rootScope){
    $rootScope.AssignedDate = Date;
})
Manish Kumar
quelle
1

Eine Lösung ähnlich der von @Nick G. unter Verwendung von Filter, aber machen Sie den Parameter aussagekräftig:

Implementieren Sie einen Filter namens, relativedateder das Datum relativ zum aktuellen Datum anhand des angegebenen Parameters als diff berechnet. Infolgedessen (0 | relativedate)bedeutet heute und (1 | relativedate)morgen.

.filter('relativedate', ['$filter', function ($filter) {
  return function (rel, format) {
    let date = new Date();
    date.setDate(date.getDate() + rel);
    return $filter('date')(date, format || 'yyyy-MM-dd')
  };
}]);

und dein HTML:

<div ng-app="myApp">
    <div>Yesterday: {{-1 | relativedate}}</div>
    <div>Today: {{0 | relativedate}}</div>
    <div>Tomorrow: {{1 | relativedate}}</div>
</div>
tsh
quelle
1

Eine andere Möglichkeit ist: Erstellen Sie in Controller eine Variable, die das aktuelle Datum enthält, wie unten gezeigt:

var eventsApp = angular.module("eventsApp", []);
eventsApp.controller("EventController", function EventController($scope) 
{

 $scope.myDate = Date.now();

});

In der HTML-Ansicht

<!DOCTYPE html>
<html ng-app="eventsApp">
<head>
    <meta charset="utf-8" />
   <title></title>
   <script src="lib/angular/angular.js"></script>
</head>
<body>
<div ng-controller="EventController">
<span>{{myDate | date : 'yyyy-MM-dd'}}</span>
</div>
</body>
</html>
Sunita
quelle
@Billa, ich habe mein Code-Snippet aktualisiert. Ich hoffe, es ist jetzt aussagekräftiger.
Sunita