Format de la date et de l'heure dans AngularJS

123

Comment afficher correctement la date et l'heure dans AngularJS?

La sortie ci-dessous montre à la fois l'entrée et la sortie, avec et sans le filtre de date AngularJS:

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

Cela imprime:

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

Le format d'affichage souhaité est 2010-10-28 23:40:23 0400ou2010-10-28 23:40:23 EST

bsr
la source

Réponses:

63

v.Dt n'est probablement pas un objet Date ().

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

mais dans votre contrôleur:

scope.v.Dt = Date.parse(scope.v.Dt);
David Souther
la source
David dans mon cas, la date est stockée au format JJ / MM / AAAA dans la base de données. Je convertis que je lui montre le format utilisateur DD.MM.YYYY dans la zone de texte ou que je prends l'entrée utilisateur dans ce format et que la même chose soit mise à jour dans mon modèle. comment changer cela avant de le passer à DB. comment dois-je changer
Yogesh
120

Votre code devrait fonctionner comme vous l'avez vu ce violon .

Vous devrez vous assurer que votre objet Datev.Dt est approprié pour que cela fonctionne.

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

ou si dateFormat est défini dans la portée comme dateFormat = 'aaaa-MM-jj HH: mm: ss Z':

{{dt | date:dateFormat }}
Gloopy
la source
Le format étant une option esthétique, il est généralement préférable de le faire directement sur la vue.
Puce
thnkx..super ans. est-il possible d'afficher l'heure au format 12 heures?
Vishnu Prasad
dt peut être un horodatage unix au format entier fonctionne aussi
tom10271
il n'est pas nécessaire qu'il s'agisse d'un Datetype de variable. L'horodatage fonctionne bien aussi
Vlad
59

Je sais que c'est un ancien article, mais j'ai pensé ajouter une autre option à envisager.

Comme la chaîne d'origine n'inclut pas le marqueur "T", l'implémentation par défaut dans Angular ne le reconnaît pas comme une date. Vous pouvez le forcer en utilisant une nouvelle date, mais c'est un peu pénible pour un tableau. Puisque vous pouvez diriger les filtres ensemble, vous pourrez peut-être utiliser un filtre pour convertir votre entrée en une date, puis appliquer la date: filtre à la date convertie. Créez un nouveau filtre personnalisé comme suit:

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

Ensuite, dans votre balisage, vous pouvez diriger les filtres ensemble:

{{item.myDateTimeString | asDate | date:'shortDate'}}
Jim Wooley
la source
Ouais, plus fiable et efficace .. Merci pour le partage
azhar_SE_nextbridge
56

vous pouvez obtenir le filtre «date» comme ceci:

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

Cela vous donnera la date du jour dans le format souhaité.

CodeOverRide
la source
lol oui, Leandro. Je ne sais pas comment ça s'est passé comme ça. Je pense que je pensais «utiliser».
CodeOverRide
49

Voici un filtre qui prendra une chaîne de date OU un objet javascript Date (). Il utilise Moment.js et peut appliquer n'importe quelle fonction de transformation Moment.js , telle que le populaire '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);
  };
});

Alors...

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

afficherait le 11 novembre 2014

{{ anyDateObjectOrString | moment: 'fromNow' }}

s'afficherait il y a 10 minutes

Si vous devez appeler plusieurs fonctions de moment, vous pouvez les enchaîner. Cela se convertit en UTC puis formate ...

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

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

Charlie Martin
la source
C'est une méthode plus puissante ! Merci!
Modder
2
C'est génial et peut également être combiné avec Moment Timezone. par exemple: {{foo.created_at | moment: 'tz': 'Amérique / New_York' | moment: 'format': 'h: mm a z'}}
Dave Collins
22

Voici quelques exemples populaires:

<div>{{myDate | date:'M/d/yyyy'}}</div> 7/4/2014

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

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

James Lawruk
la source
simple, élégant et exactement ce qui a été demandé
Ignotus
15

Avez-vous vu la section Directives d'écriture (version courte) de la documentation ?

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';
}
Chasse
la source
2
Je pense que votre commentaire est très valable. Apprendre à faire des filtres est une partie essentielle d'AngularJS. Ce n'est vraiment pas si difficile.
Spock
6

À l'intérieur d'un contrôleur, le format peut être filtré en injectant $ filter.

var date = $filter('date')(new Date(),'MMM dd, yyyy');
Tjs
la source
5

Simplement, si vous voulez sortir comme "30 janvier 2017 16:31:20", passez à l'étape simple

step1- Déclarer la variable suivante dans le contrôleur js

$scope.current_time = new Date();

étape2- affichage dans la page html comme

{{heure_actuelle | date: 'moyen'}}

Shani Singh
la source
5

nous pouvons formater la date sur le côté de la vue en angulaire est très facile .... veuillez vérifier l'exemple ci-dessous:

{{dt | date: "jj-MM-aaaa"}}

Rajat-Systematix
la source
3

Vous pouvez utiliser momentjspour implémenter un filtre date-heure dans angularjs. Par exemple:

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

Où la date est au format d'horodatage.

Rubi saini
la source
1

Ajoutez une $filterdépendance dans le contrôleur.

var formatted_datetime = $filter('date')(variable_Containing_time,'yyyy-MM-dd HH:mm:ss Z')
Aniket B
la source
2
Bien que cet extrait de code puisse résoudre la question, inclure une explication contribue vraiment à améliorer la qualité de votre message. N'oubliez pas que vous répondez à la question aux lecteurs à l'avenir, et que ces personnes pourraient ne pas connaître les raisons de votre suggestion de code. Essayez également de ne pas surcharger votre code avec des commentaires explicatifs, cela réduit la lisibilité du code et des explications!
kayess
0

Je vous suggère d'utiliser moment.js, il a un bon support pour le formatage de la date en fonction des paramètres régionaux.

créer un filtre qui utilise en interne la méthode moment.js pour le formatage de la date.

Rahul Tokase
la source