AngularJS'de Tarih saatini biçimlendirme


123

AngularJS'de tarih ve saati nasıl düzgün bir şekilde görüntülerim?

Aşağıdaki çıktı, AngularJS tarih filtreli ve filtresiz hem girişi hem de çıkışı gösterir:

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

Bu şunu yazdırır:

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

İstenen görüntüleme biçimi 2010-10-28 23:40:23 0400veya2010-10-28 23:40:23 EST

Yanıtlar:


63

v.Dt büyük olasılıkla bir Date () nesnesi değildir.

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

ama kontrol cihazınızda:

scope.v.Dt = Date.parse(scope.v.Dt);

David, benim vaka tarihimde Veritabanında GG / AA / YYYY formatında saklanıyor. Metin kutusunda kullanıcıya DD.MM.YYYY formatını gösterdiğimi veya bu formatta kullanıcı girdisini aldığımı ve modelimde de aynısını güncellediğimi dönüştürüyorum. DB'ye geçmeden önce nasıl değiştirilir. nasıl değiştirmeliyim
Yogesh

120

Kodunuz, bu keman gördüğünüz gibi çalışmalıdır .

Yine de çalışması için v.Dtuygun bir Tarih nesnesi olduğundan emin olmalısın .

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

veya dateFormat, kapsamda dateFormat = 'yyyy-MM-gg HH: mm: ss Z' olarak tanımlanmışsa:

{{dt | date:dateFormat }}

Biçim kozmetik bir seçenek olduğundan, bunu doğrudan görünümde yapmak genellikle daha iyi bir fikirdir.
Puce

thnkx..super ans. saati 12 saat formatında göstermek mümkün mü?
Vishnu Prasad

dt tamsayı biçiminde bir unix zaman damgası olabilir de işe yarıyor
tom10271

Datedeğişken için bir tür olması gerekli değildir . Zaman damgası uzun da iyi çalışıyor
Vlad

59

Bunun eski bir öğe olduğunu biliyorum, ancak düşünmek için başka bir seçenek daha atayım dedim.

Orijinal dize "T" tanımlayıcıyı içermediğinden, Angular'daki varsayılan uygulama onu bir tarih olarak tanımaz. Bunu yeni Tarih kullanarak zorlayabilirsiniz, ancak bu bir dizi için biraz acı vericidir. Filtreleri birlikte kanalize edebileceğinizden, girdinizi bir tarihe dönüştürmek için bir filtre kullanabilir ve ardından dönüştürülen tarihte date: filtresini uygulayabilirsiniz. Aşağıdaki gibi yeni bir özel filtre oluşturun:

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

Ardından işaretlemenizde, filtreleri birlikte yönlendirebilirsiniz:

{{item.myDateTimeString | asDate | date:'shortDate'}}

Evet, daha güvenilir ve verimli ..
Paylaştığınız

56

'tarih' filtresini şu şekilde alabilirsiniz:

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

Bu size bugünün tarihini istediğiniz biçimde verecektir.


haha evet Leandro. Nasıl böyle olduğunu bilmiyorum. Sanırım 'kullan' diye düşünüyordum.
CodeOverRide

49

Burada bir bir tarih dizesi VEYA javascript Date () nesnesi alacak filtre . Moment.js kullanır ve popüler 'fromNow' gibi herhangi bir Moment.js dönüştürme işlevini uygulayabilir.

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);
  };
});

Yani...

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

görüntüleyecektir Kas 11, 2014

{{ anyDateObjectOrString | moment: 'fromNow' }}

görüntüleyecektir 10 dakika önce

Birden fazla moment fonksiyonunu çağırmanız gerekirse, bunları zincirleyebilirsiniz. Bu, UTC'ye dönüştürülür ve ardından biçimlendirilir ...

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

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


Daha güçlü bir yöntem ! Teşekkürler!
Modder

2
Bu harika ve aynı zamanda Moment Timezone ile birleştirilebilir. örneğin: {{foo.created_at | moment: 'tz': 'Amerika / New_York' | an: 'format': 'h: mm a z'}}
Dave Collins

22

İşte birkaç popüler örnek:

<div>{{myDate | date:'M/d/yyyy'}}</div> 2014/07/04

<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


basit, zarif ve tam olarak ne sorulmuştu
Ignotus

15

Dokümantasyonun Yazma yönergeleri (kısa versiyon) bölümünü gördünüz mü ?

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';
}

2
Yorumunuzun çok geçerli olduğunu düşünüyorum. Filtreler yapmayı öğrenmek, AngularJS'nin önemli bir parçasıdır. Gerçekten o kadar zor değil.
Spock

6

Bir denetleyicinin içinde format, $ filter enjekte edilerek filtrelenebilir.

var date = $filter('date')(new Date(),'MMM dd, yyyy');

5

Basitçe "30 Ocak 2017 16:31:20" gibi çıktı almak istiyorsanız basit adımı izleyin

adım1- js denetleyicisinde aşağıdaki değişkeni bildirin

$scope.current_time = new Date();

step2- gibi html sayfasında görüntüle

{{current_time | tarih: 'orta'}}


5

Görünüm tarafındaki tarihi açısal olarak biçimlendirebiliriz çok kolaydır .... lütfen aşağıdaki örneği kontrol edin:

{{dt | tarih: "gg-AA-yyyy"}}


3

momentjsAngularjs'de tarih-saat filtresi uygulamak için kullanabilirsiniz . Örneğin:

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 "";
    };
});

Tarihin zaman damgası biçiminde olduğu yer.


1

$filterDenetleyicide bağımlılık ekleyin .

var formatted_datetime = $filter('date')(variable_Containing_time,'yyyy-MM-dd HH:mm:ss Z')

2
Bu kod parçacığı soruyu çözebilirken, bir açıklama eklemek, yayınınızın kalitesini iyileştirmeye gerçekten yardımcı olur. Gelecekte okuyucular için soruyu yanıtladığınızı ve bu kişilerin kod önerinizin nedenlerini bilmeyebileceklerini unutmayın. Lütfen kodunuzu açıklayıcı yorumlarla doldurmamaya çalışın, bu hem kodun hem de açıklamaların okunabilirliğini azaltır!
kayess

0

Moment.js kullanmanızı öneririm, yerel ayarlara göre tarih biçimlendirme konusunda iyi bir desteğe sahiptir.

Tarihi biçimlendirmek için moment.js yöntemini dahili olarak kullanan bir filtre oluşturun.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.