Angularjs - відображення поточної дати


128

Я отримав перегляд у angularjs, і я просто намагаюся відобразити поточну дату (відформатовану). Я думав, що щось на кшталт <span>{{Date.now() | date:'yyyy-MM-dd'}}</span>має відображати поточну дату.


Було б .. але це не знає Date.now().
путванде

2
Отже, я повинен створити змінну в контролері спочатку? Я подумав, що щось просте, як поточна дата, буде простіше :)
Evo_x

1
Date.now()є функція nodeJS
Най

Відповіді:


229

Спочатку потрібно створити об’єкт дати у контролері:

контролер:

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

вид:

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

Приклад JSFiddle

Кутовий фільтр фіг


Привіт @sloth Я хочу використовувати cgi для відображення поточного системного часу. Як я можу це зробити? Або це можливо? Дякую
bleyk

44

Ви також можете зробити це за допомогою фільтра, якщо вам не потрібно приєднувати об'єкт дати до поточного діапазону кожного разу, коли ви бажаєте надрукувати дату:

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

а потім на ваш погляд:

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

5
Він може також зробити директиву тоді
arg20

23

Шаблон

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

Директива

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

Оскільки ви не можете отримати доступ до Dateоб'єкта прямо у шаблоні (для вбудованого рішення), я вибрав цю Директиву. Він також підтримує чисті контролери та їх багаторазове використання.


19

Ну, ви можете це зробити з виразом вуса ( {{Date.now() | date:'dd.MM.yyyy HH:mm:ss'}}). Вам просто потрібно призначити об’єкту Date область, де ви хочете оцінити цей вираз.

Ось приклад jsfiddle : jsfiddle

Але не сподівайтеся, що воно автоматично оновить значення. Це значення не спостерігається кутовим, тому ви повинні запускати дайджест щоразу, коли ви хочете оновлювати його (наприклад, за інтервал $) ... що є витратою ресурсів (а також не "рекомендовано" в документах). Звичайно, ви можете скористатися комбінацією з директивами / контролерами, щоб возитися лише з дочірньою областю (вона завжди менша, ніж, наприклад, rootScope і дайджест буде швидше).


9

Тільки мої 2 копійки на випадок, якщо хтось натрапить на це :)

Що я тут пропоную, матиме такий самий результат, що й нинішня відповідь, проте рекомендується писати контролеру так, як я тут згадував.

Прокрутка посилання на першу "Примітку" (Вибачте, вона не має якір)

Ось рекомендований спосіб:

Контролер:

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

Вид:

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

2

Ви можете використовувати moment()та format()функціонувати в AngularJS.

Контролер:

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

Вид:

<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

Вид

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

Контролер

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

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

1

Рішення, подібне до рішення @Nick G. за допомогою фільтра, але зробить параметр значимим:

Вкажіть фільтр, relativedateякий називається датою відновлення поточної дати за даним параметром як розл. Як результат, (0 | relativedate)означає сьогодні і (1 | relativedate)означає завтра.

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

і ваш html:

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

1

Інший спосіб зробити це: У Controller створіть змінну для зберігання поточної дати, як показано нижче:

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

 $scope.myDate = Date.now();

});

У перегляді 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, я оновив свій фрагмент коду. Сподіваюся, зараз це більш описово.
Суніта
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.