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ę.

Evo_x
źródło
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

Leniwiec
źródło
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>
Nick G.
źródło
5
Równie
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.

flori
źródło
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).

JakubKnejzlik
źródło
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>
Pan H.
źródło
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>
nari_atyachari
źródło
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
źródło
1

Oto próbka Twojej odpowiedzi: 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" />

a następnie w kontrolerze:

$scope.DateOfBirth = new Date();
Mohaimin Moin
źródło
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;
})
Manish Kumar
źródło
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>
tsh
źródło
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>
Sunita
źródło
@Billa, zaktualizowałem fragment kodu. Mam nadzieję, że teraz jest bardziej opisowy.
Sunita