Angularjs'de tarih nasıl biçimlendirilir


143

Tarihi olarak biçimlendirmek istiyorum mm/dd/yyyy. Aşağıdakileri denedim ve hiçbiri benim için çalışmıyor. Biri bana bu konuda yardımcı olabilir mi?

başvuru: ui-date

<input ui-date ui-date-format="mm/dd/yyyy" ng-model="valueofdate" /> 

<input type="date" ng-model="valueofdate" />

1
ui-date-format="mm/dd/yyyy"Tamamen kaldırmayı denediniz mi? Bu seçenek olmadan varsayılan davranış istediğiniz gibi görünüyor.
Lukas

Moment.js'yi denediniz mi?
Cétia

Hayır moment.js'yi denemedim. Sunucum bana Json dizesi 20140313T00: 00: 00 döndürüyor. Her iki şekilde html5 giriş türü tarih ve ui-tarih-biçimini denedim. Ui-date-formatının kaldırılması, bir dize biçiminin verildiğini söylüyor.
Kullanıcı16

Bu yanıtı kullanmak $formattersve buna $parsersgöre benzer sorunumu çözdüm.
Ross Rogers

Yanıtlar:


204

Angular.js yerleşik bir tarih filtresine sahiptir.

gösteri

// in your controller:
$scope.date = '20140313T00:00:00';

// in your view, date property, filtered with date filter and format 'MM/dd/yyyy'
<p ng-bind="date | date:'MM/dd/yyyy'"></p>

// produces
03/13/2014

Tarih filtresinin kaynağında desteklenen tarih biçimlerini görebilirsiniz .

düzenleme :

Tarih seçicide doğru biçimi almaya çalışıyorsanız (datepicker kullanıyorsanız veya yalnızca biçimlendiricisini kullanmaya çalışıyorsanız, desteklenmeyen biçim dizeleri buradadır: https://api.jqueryui.com/datepicker/


1
sunucu bana '20140313T00: 00: 00 döndürüyor ve ben böyle bir girişte mm / gg / yyyy biçiminde göstermek istiyorum - <giriş türü = tarih "ng-model =" gün ">
16'da

Cevabımın neden reddedildiğinden emin değilim. Bu cevap neredeyse Angular'ın belgelerinden kelimesi kelimesine alınmıştır. JQueryUI tarih seçici biçim dizelerinin belirtilmesi, soruda kullanılan modülün jQuery ve jQueryUI bağımlılığı olan ui-date olmasıdır. Cevapta yanlış veya yanıltıcı bir şey yok.
Jim Schubert

Ben jQuery UI bağlantı biçim dizeleri için doğru olduğunu sanmıyorum. docs.angularjs.org/api/ng/filter/date daha doğru görünüyor.
TrueWill

@TrueWill OP özellikle jQuery datepicker kullanan ui-date hakkında sorular soruyor. Yazımdaki ilk bağlantı, açısal tarafından desteklenen biçim dizelerine sahip kaynak koduna bağlanır.
Jim Schubert

@JimSchubert Bu benim tarih dizesi '2013-11-11 00:00:00' ve dönüştürmez | date: 'longdate', herhangi bir öneriniz var mı?
alphapilgrim

97

Bir giriş alanınız yoksa, yalnızca uygun bir biçimlendirmeyle bir dize tarihi görüntülemek istiyorsanız, şunları yapabilirsiniz:

<label ng-bind="formatDate(date) |  date:'MM/dd/yyyy'"></label>

ve js dosyasında şunu kullanın:

    // @Function
    // Description  : Triggered while displaying expiry date
    $scope.formatDate = function(date){
          var dateOut = new Date(date);
          return dateOut;
    };

Bu, dizedeki tarihi javascript'te yeni bir tarih nesnesine dönüştürür ve tarihi AA / gg / yyyy biçiminde görüntüler.

Çıktı: 12/15/2014

Düzenle
"2014-12-19 20:00:00" dize biçiminde (PHP arka ucundan geçirilir) dize tarihi kullanıyorsanız, kodu şu adresteki şekilde değiştirmeniz gerekir: https://stackoverflow.com / a / 27616348/1904479

Daha fazla ekleme
Javascript'ten kodu şu şekilde ayarlayabilirsiniz:

$scope.eqpCustFields[i].Value = $filter('date')(new Date(dateValue),'yyyy-MM-dd');

zaten sizinle bir tarih olması durumunda, geçerli sistem tarihini almak için aşağıdaki kodu kullanabilirsiniz:

$scope.eqpCustFields[i].Value = $filter('date')(new Date(),'yyyy-MM-dd');

Tarih Biçimleri hakkında daha fazla bilgi için bkz. Https://docs.angularjs.org/api/ng/filter/date


27

Bunu kullanıyorum ve iyi çalışıyor.

{{1288323623006 | date:'medium'}}: Oct 29, 2010 9:10:23 AM
{{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}: 2010-10-29 09:10:23 +0530
{{1288323623006 | date:'MM/dd/yyyy @ h:mma'}}: 10/29/2010 @ 9:10AM
{{1288323623006 | date:"MM/dd/yyyy 'at' h:mma"}}: 10/29/2010 at 9:10AM

JS Date nesnesini iletirsem bu benim için çalışmaz. herhangi bir öneri neden?
Panshul

Yalnızca, tarihin milisaniye cinsinden olduğu tarih biçiminde ve sizin durumunuzda tarihin Tarih Biçimi'ndeyse çalışmalıdır. Follow: w3schools.com/js/js_date_formats.asp
Ravindra

18

Bu tam olarak istediğiniz şey değil - html'de bir tarih giriş alanı oluşturmayı deneyebilirsiniz:

<input type="date" ng-model="myDate" />

Daha sonra bunu kullanmak istediğiniz sayfaya yazdırmak için:

<span ng-bind="convertToDate(myDate) | date:'medium'"></span>

Son olarak, denetleyicimde, giriş değerinden bir tarih oluşturan bir yöntem beyan ettim (ki kromda görünüşe göre 1 gün kapalı).

$scope.convertToDate = function (stringDate){
  var dateOut = new Date(stringDate);
  dateOut.setDate(dateOut.getDate() + 1);
  return dateOut;
};

İşte burada. Her şeyi görmek için aşağıdaki dalma makinesine bakın: http://plnkr.co/edit/8MVoXNaIDW59kQnfpaWW?p=preview . İyi şanslar!


11

Bu çalışacak:

{{ oD.OrderDate.replace('/Date(','').replace(')/','') | date:"MM/dd/yyyy" }}

NOT: bunları değiştirdikten sonra kalan tarih / milis değerleri ilgili kareye dönüştürülecektir.


nedense alanım şu formatta / Tarih (99999) / şeklinde, neden biliyor musunuz?
Antonio Correia

9

bkz. açısal dateapi: AngularJS API: tarih


Açısal - datefiltre:

Kullanımı:

{{ date_expression | date  [: 'format']  [: 'timezone' ] }}


exampe:

Kod:

 <span>{{ '1288323623006' | date:'MM/dd/yyyy' }}</span>

Sonuç:

10/29/2010

7

Ben kullanım filtresi

.filter('toDate', function() {
  return function(items) {
    return new Date(items);
  };
});

sonra

{{'2018-05-06 09:04:13' | toDate | date:'dd/MM/yyyy hh:mm'}}

3

UTC tarih biçimini sunucu tarafı kodunuzdan istemci tarafına geçirmeniz yeterlidir

ve aşağıdaki sözdizimini kullanın -

 {{dateUTCField  +'Z' | date : 'mm/dd/yyyy'}}

 e.g. dateUTCField = '2018-01-09T10:02:32.273' then it display like 01/09/2018

1

Yukarıdaki tüm çözümlere baktıktan sonra, aşağıdakiler benim için en hızlı çözümdü. Açısal malzeme kullanıyorsanız:

 <md-datepicker ng-model="member.reg_date" md-placeholder="Enter date"></md-datepicker>

Biçimi ayarlamak için:

app.config(function($mdDateLocaleProvider) {
    $mdDateLocaleProvider.formatDate = function(date) {
        // Requires Moment.js OR enter your own formatting code here....
        return moment(date).format('DD-MM-YYYY');
    };
});

Düzenleme: Ayrıca bir tarih yazmak için parseDate ayarlamanız gerekir (bu yanıttan Açısal Malzemede md-datepicker biçimini değiştirin )

$mdDateLocaleProvider.parseDate = function(dateString) {
    var m = moment(dateString, 'DD/MM/YYYY', true);
    return m.isValid() ? m.toDate() : new Date(NaN);
};

1
var app=angular.module('myApp',[]);
        app.controller('myController',function($scope){         
              $scope.names = ['1288323623006','1388323623006'];

        });

Burada Denetleyici adı "myController" ve uygulama adı "myApp" dır.

<div ng-app="myApp" ng-controller="myController">
        <ul>
            <li ng-repeat="x in names">
                {{x | date:'mm-dd-yyyy'}}

            </li>

        </ul>
    </div>

Sonuç şöyle görünecektir: - * 10-29-2010 * 01-03-2013


0

Tamam, bu satırdan geliyor gibi görünüyor:
https://github.com/angular-ui/ui-date/blob/master/src/date.js#L106 .

Aslında bu satır, veri formatını enjekte etmenin yeri olması gereken jQuery UI ile bağlantıdır.

Gördüğünüz gibi, tahmin edebileceğiniz gibi ng-date-format değerine sahip bir var optsözellik yok dateFormat.

Her neyse, yönergede uiDateConfigözellik eklemek için çağrılan bir sabit vardır opts.

Esnek çözüm (önerilir):

Gönderen burada size jquery ui seçenekleri ile yönerge bir kontrolör değişkeni enjekte bazı seçenekleri ekleyebilirsiniz görebilirsiniz.

<input ui-date="dateOptions" ui-date-format="mm/dd/yyyy" ng-model="valueofdate" />

myAppModule.controller('MyController', function($scope) {
    $scope.dateOptions = {
        dateFormat: "dd-M-yy"
    };
});

Sabit kodlu çözüm:

Bu prosedürü her zaman tekrarlamak istemiyorsanız uiDateConfigdate.js içindeki değeri şu şekilde değiştirin:

.constant('uiDateConfig', { dateFormat: "dd-M-yy" })

0

Aynı sorunu yaşadım ve yukarıdaki yorumlarda olduğu gibi, JavaScript'te yerel bir yöntem olması gerektiğini düşündüm. Şey new Date(valueofdate)bir Date nesnesi döndürür.

Ancak, baştaki sıfırı söyleyen kısmı http://www.w3schools.com/js/js_date_formats.asp adresini ziyaret edin . Bir Dizeden bir tarih, örneğin PHP'den bir yankı:

$valueofdate = date('Y-n-j',strtotime('theStringFromQuery'));

Bu bir Dize iletir, örneğin: '1999-3-3've JavaScript doğru biçime sahip bir nesneye ayrıştırma yapar.

$scope.valueofdate = new Date(valueofdate);

<input ui-date ui-date-format="mm/dd/yyyy" ng-model="valueofdate" />
<input type="date" ng-model="valueofdate" />

Tarih biçimleri için PHP'ye bağlantı: http://www.w3schools.com/php/func_date_date_format.asp .


0

ng-bind="reviewData.dateValue.replace('/Date(','').replace(')/','') | date:'MM/dd/yyyy'"

Bunu kullanmak iyi çalışmalıdır. :) reviewData ve dateValue alanları parametre dinlenme ayarınıza göre değiştirilebilir aynı bırakılabilir


0
{{convertToDate  | date :  dateformat}}                                             
$rootScope.dateFormat = 'MM/dd/yyyy';

1
Neden cevabınızdakiyle aynı satırda yorum yayınlıyorsunuz? Ve cevabınız sadece bir kod, hiçbir açıklama yok.
Pochmurnik

-1
// $scope.dateField="value" in ctrl
<div ng-bind="dateField | date:'MM/dd/yyyy'"></div>
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.