Angularjs - wyświetla aktualną datę


129

Mam widok w angularjs i po prostu próbuję wyświetlić aktualną datę (sformatowaną). Pomyślałem, że coś takiego <span>{{Date.now() | date:'yyyy-MM-dd'}}</span>powinno wyświetlać aktualną datę.


Byłoby… ale nie wie Date.now().
putvande

2
Więc najpierw muszę wygenerować zmienną w kontrolerze? Pomyślałem, że coś prostego, jak obecna data, będzie łatwiejsze :)
Evo_x

1
Date.now()to funkcja nodeJS
Nay

Odpowiedzi:


231

Najpierw musisz utworzyć obiekt daty w kontrolerze:

kontroler:

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

widok:

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

Przykład JSFiddle

Filtr daty kątowej Nr ref


cześć @sloth Chcę użyć cgi do wyświetlenia aktualnego czasu systemowego. Jak mogę to zrobić? Czy jest to możliwe? Dzięki
bleyk

44

Możesz to również zrobić za pomocą filtra, jeśli nie chcesz dołączać obiektu daty do bieżącego zakresu za każdym razem, gdy chcesz wydrukować datę:

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

a następnie Twoim zdaniem:

<div ng-app="myApp">
    <div>{{'' | currentdate}}</div>
</div>

5

23

Szablon

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

Dyrektywa

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

Ponieważ nie możesz uzyskać dostępu do Dateobiektu bezpośrednio w szablonie (w przypadku rozwiązania wbudowanego), zdecydowałem się na tę dyrektywę. Utrzymuje również kontrolery w czystości i nadaje się do wielokrotnego użytku.


19

Cóż, możesz to zrobić za pomocą wyrażenia wąsów ( {{Date.now() | date:'dd.MM.yyyy HH:mm:ss'}}). Wystarczy przypisać obiekt Date do zakresu, w którym chcesz ocenić to wyrażenie.

Oto przykład jsfiddle : jsfiddle

Ale nie oczekuj, że automatycznie zaktualizuje wartość. Ta wartość nie jest obserwowana przez kąt, więc musisz wywoływać skrót za każdym razem, gdy chcesz go zaktualizować (na przykład o interwał $) ... co jest marnowaniem zasobów (a także nie jest „zalecane” w dokumentach). Oczywiście możesz użyć kombinacji z dyrektywami / kontrolerami, aby bawić się tylko zakresem podrzędnym (jest zawsze mniejszy niż na przykład rootScope, a skrót będzie szybszy).


9

Tylko moje 2 centy na wypadek, gdyby ktoś się na to natknął :)

To, co tu proponuję, będzie miało taki sam skutek, jak obecna odpowiedź, jednak zaleca się napisanie kontrolera w sposób, o którym tutaj wspomniałem.

Odsyłacz przewiń do pierwszej „notatki” (niestety nie ma kotwicy)

Oto zalecany sposób:

Kontroler:

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

Widok:

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

2

Możesz używać moment()i format()funkcji w AngularJS.

Kontroler:

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

Widok:

<div ng-app="demoApp">
  <div ng-controller="demoCtrl">
    {{date}}
  </div>
</div>

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>


1

Widok

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

Kontroler

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

app.run(function($rootScope){
    $rootScope.AssignedDate = Date;
})

1

Rozwiązanie podobne do tego z @Nick G. przy użyciu filtra, ale parametrowi znaczenie:

Zaimplementuj filtr o nazwie, relativedatektóry oblicza datę względem aktualnej daty przez dany parametr jako diff. W rezultacie (0 | relativedate)oznacza dzisiaj i (1 | relativedate)oznacza jutro.

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

i twój html:

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

1

Innym sposobem jest: W kontrolerze utwórz zmienną, która będzie przechowywać aktualną datę, jak pokazano poniżej:

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

 $scope.myDate = Date.now();

});

W widoku HTML

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

@Billa, zaktualizowałem fragment kodu. Mam nadzieję, że teraz jest bardziej opisowy.
Sunita
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.