web-dev-qa-db-fra.com

AngularJS: Comment formater le format de date ISO8601?

J'utilise bootstrap-datetimepicker et j'utilise le format de date/heure ISO8601 en tant que yyyy-mm-ddThh:ii:ssZ comme indiqué dans la section options

Dans mon contrôleur, je fais

transaction.date = $('.form_datetime input').val();

qui envoie les données à backend en tant que (console.log)

created_on: "Wed, 08 May 2013 23:18:32 -0000"

et enregistre dans la base de données en tant que

2013-05-08 16:18:32-07

Dans mon modèle, je fais

<td>{{ transaction.created_on | date:'medium'}}</td>

et je vois la sortie sur mon HTML comme

Wed, 08 May 2013 23:18:32 -0000

Mais selon le Angular doc , il devrait s'agir du format Oct 28, 2010 8:40:23 PM

Qu'est-ce qui me manque?

14
daydreamer

Pour l'instant, j'ai créé un filtre

angular.module('customFilters', []).
  filter('dateInMillis', function() {
    return function(dateString) {
      return Date.parse(dateString);
    };
  });

ajouté comme dépendance dans app.js en tant que 

var app = angular.module('myApp', [
  '$strap.directives', 'ngCookies', 'categoryServices', 'transactionServices',
  'customFilters'
]);

et dans HTML utilisé comme

<!-- added dateInMillis to pass to date to filter Angular way -->
<td>{{ transaction.created_on | dateInMillis | date: 'medium'}}</td>

et qui présente la date sur HTML comme 

May 8, 2013 5:14:36 PM 

Si vous connaissez une meilleure idée, s'il vous plaît faites le moi savoir

12
daydreamer

Je ne comprends pas pourquoi personne n'a fourni la simple réponse d'utiliser le bon format dans le filtre?

{{item.date | date:'yyyy-MM-ddTHH:mm:ssZ'}}

Cela formatera comme ISO-8601

43
Robbo

Au Brésil (et dans la plupart des pays d’Europe, Australie, etc.), nous utilisons la valeur par défaut MySQL DATETIME sur les bases de données:

"Y-m-d HH:ii:ss"

Mais utilisez date () pour l’afficher comme ceci:

"d/m/Y HH:ii:ss"

Donc, pour afficher cette date sous forme angulaire, "correctement", créez un filtre:

var app = angular.module(...

// Converts MySQL datetime into readable BR format
/*
    Converts 2013-10-18 18:47:15 into 1382122035000 so angular can format date 
    using brazilian standards
*/
app.filter('brDateFilter', function() {
    return function(dateSTR) {
        var o = dateSTR.replace(/-/g, "/"); // Replaces hyphens with slashes
        return Date.parse(o + " -0000"); // No TZ subtraction on this sample
    }
});

Ensuite, sur votre application angulaire, appelez simplement le filtre et formatez la valeur pour l'affichage:

{{ item.datetime_value | brDateFilter | date:"dd/MM/yyyy HH:mm" }}

Cela couvre le format de date au Brésil, au Royaume-Uni, en Nouvelle-Zélande, etc. format de date angulaire, il suffit de soustraire le fuseau horaire correctement.

9
Antonio Max

A côté de tout cela, vous avez juste à changer comme ça,

<td>{{ transaction.created_on | date:'medium'}}</td>

essayez de l'écrire comme 

<td>{{ transaction.created_on | date:'MMM d, y h:mm:ss a'}}</td>
1
ANK