Formatowanie daty i godziny w AngularJS

123

Jak poprawnie wyświetlić datę i godzinę w AngularJS?

Poniższe dane wyjściowe pokazują zarówno dane wejściowe, jak i wyjściowe, z filtrem daty AngularJS i bez niego:

In: {{v.Dt}}  
AngularJS: {{v.Dt | date:'yyyy-MM-dd HH:mm:ss Z'}}

To drukuje:

In: 2012-10-16T17:57:28.556094Z 
AngularJS: 2012-10-16T17:57:28.556094Z

Żądany format wyświetlania to 2010-10-28 23:40:23 0400lub2010-10-28 23:40:23 EST

bsr
źródło

Odpowiedzi:

63

v.Dt prawdopodobnie nie jest obiektem Date ().

Zobacz http://jsfiddle.net/southerd/xG2t8/

ale w kontrolerze:

scope.v.Dt = Date.parse(scope.v.Dt);
David Souther
źródło
David w moim przypadku data jest przechowywana w formacie DD / MM / RRRR w bazie danych. Konwertuję, że pokazuję go użytkownikowi w formacie DD.MM.RRRR w polu tekstowym lub biorę dane wejściowe użytkownika w tym formacie i to samo zostaje zaktualizowane w moim modelu. jak to zmienić przed przekazaniem go do DB. jak mam się zmienić
Yogesh
120

Twój kod powinien działać tak, jak go masz, zobacz to skrzypce .

Musisz jednak upewnić się, że v.Dtjest to odpowiedni obiekt Date , aby działał.

{{dt | date:'yyyy-MM-dd HH:mm:ss Z'}}

lub jeśli dateFormat jest zdefiniowany w zakresie jako dateFormat = 'yyyy-MM-dd HH: mm: ss Z':

{{dt | date:dateFormat }}
Gloopy
źródło
Ponieważ format jest opcją kosmetyczną, generalnie lepiej jest robić to bezpośrednio na widoku.
Puce
thnkx..super ans. czy można wyświetlić czas w formacie 12-godzinnym?
Vishnu Prasad
dt może być uniksowym znacznikiem czasu w formacie całkowitoliczbowym też działa
tom10271
nie jest wymagane, aby był Datetypem zmiennej. Znacznik czasu od dawna też działa dobrze
Vlad
59

Wiem, że to stary przedmiot, ale pomyślałem, że wrzuciłbym inną opcję do rozważenia.

Ponieważ oryginalny ciąg nie zawiera demarkera „T”, domyślna implementacja w Angular nie rozpoznaje go jako daty. Możesz wymusić to za pomocą nowej daty, ale jest to trochę uciążliwe dla tablicy. Ponieważ filtry można potokować razem, można użyć filtru, aby przekonwertować dane wejściowe na datę, a następnie zastosować datę: filtruj do przekonwertowanej daty. Utwórz nowy filtr niestandardowy w następujący sposób:

app
.filter("asDate", function () {
    return function (input) {
        return new Date(input);
    }
});

Następnie w swoim znaczniku możesz połączyć filtry ze sobą:

{{item.myDateTimeString | asDate | date:'shortDate'}}
Jim Wooley
źródło
Tak, bardziej niezawodne i wydajne .. Dzięki za udostępnienie
azhar_SE_nextbridge
56

możesz pobrać filtr „daty” w ten sposób:

var today = $filter('date')(new Date(),'yyyy-MM-dd HH:mm:ss Z');

W ten sposób otrzymasz dzisiejszą datę w wybranym formacie.

CodeOverRide
źródło
lol tak, Leandro. Nie wiem, jak to się stało. Myślę, że myślałem o „używaniu”.
CodeOverRide
49

Oto filtr , który przyjmie ciąg znaków daty LUB obiekt Date () javascript. Używa Moment.js i może zastosować dowolną funkcję transformacji Moment.js , taką jak popularna funkcja „fromNow”

angular.module('myModule').filter('moment', function () {
  return function (input, momentFn /*, param1, param2, ...param n */) {
    var args = Array.prototype.slice.call(arguments, 2),
        momentObj = moment(input);
    return momentObj[momentFn].apply(momentObj, args);
  };
});

Więc...

{{ anyDateObjectOrString | moment: 'format': 'MMM DD, YYYY' }}

wyświetli się 11 listopada 2014 r

{{ anyDateObjectOrString | moment: 'fromNow' }}

wyświetli się 10 minut temu

Jeśli chcesz wywołać wiele funkcji momentowych, możesz je połączyć. To konwertuje do UTC, a następnie formatuje ...

{{ someDate | moment: 'utc' | moment: 'format': 'MMM DD, YYYY' }}

https://gist.github.com/cmmartin/341b017194bac09ffa1a

Charlie Martin
źródło
To potężniejsza metoda ! Dzięki!
Modder
2
Jest to genialne i można je również połączyć z Moment Timezone. np .: {{foo.created_at | moment: 'tz': 'Ameryka / Nowy_Jork' | moment: 'format': 'h: mm a z'}}
Dave Collins
22

Oto kilka popularnych przykładów:

<div>{{myDate | date:'M/d/yyyy'}}</div> 04.07.2014

<div>{{myDate | date:'yyyy-MM-dd'}}</div> 2014-07-04

<div>{{myDate | date:'M/d/yyyy HH:mm:ss'}}</div> 04.07.2014 12:01:59

James Lawruk
źródło
proste, eleganckie i dokładnie to, o co pytano
Ignotus
15

Czy widziałeś sekcję o dyrektywach pisania (wersja skrócona) w dokumentacji ?

HTML

<div ng-controller="Ctrl2">
      Date format: <input ng-model="format"> <hr/>
      Current time is: <span my-current-time="format"></span>
</div> 

JS

function Ctrl2($scope) {
  $scope.format = 'M/d/yy h:mm:ss a';
}
Pościg
źródło
2
Myślę, że twój komentarz jest bardzo ważny. Nauka korzystania z filtrów jest istotną częścią AngularJS. To naprawdę nie jest takie trudne.
Spock
6

Wewnątrz kontrolera format można filtrować, wprowadzając $ filter.

var date = $filter('date')(new Date(),'MMM dd, yyyy');
Tjs
źródło
5

Po prostu, jeśli chcesz wydrukować w stylu „30 stycznia 2017 16:31:20”, wykonaj proste czynności

step1 - Zadeklaruj następującą zmienną w kontrolerze js

$scope.current_time = new Date();

step2 - wyświetlanie na stronie html, takiej jak

{{current_time | data: 'średni'}}

shani singh
źródło
5

możemy sformatować datę w widoku kątowym, jest bardzo łatwe .... sprawdź poniższy przykład:

{{dt | data: "dd-MM-rrrr"}}

Rajat-Systematix
źródło
3

Możesz użyć momentjsdo zaimplementowania filtra daty i godziny w angularjs. Na przykład:

angular.module('myApp')
 .filter('formatDateTime', function ($filter) {
    return function (date, format) {
        if (date) {
            return moment(Number(date)).format(format || "DD/MM/YYYY h:mm A");
        }
        else
            return "";
    };
});

Gdzie data jest w formacie znacznika czasu.

Rubi saini
źródło
1

Dodaj $filterzależność w kontrolerze.

var formatted_datetime = $filter('date')(variable_Containing_time,'yyyy-MM-dd HH:mm:ss Z')
Aniket B
źródło
2
Chociaż ten fragment kodu może rozwiązać problem, dołączenie wyjaśnienia naprawdę pomaga poprawić jakość Twojego posta. Pamiętaj, że odpowiadasz na pytanie do czytelników w przyszłości, a osoby te mogą nie znać powodów, dla których zaproponowałeś kod. Prosimy również starać się nie zatłaczać kodu komentarzami wyjaśniającymi, ponieważ zmniejsza to czytelność zarówno kodu, jak i wyjaśnień!
kayess
0

Sugerowałbym użycie momentu.js, który ma dobre wsparcie dla formatowania daty zgodnie z lokalizacjami.

utwórz filtr, który wewnętrznie używa metody moment.js do formatowania daty.

Rahul Tokase
źródło