Mes dates de sortie de la base de données ressemblent à ceci: 2013-11-21 17:43:20
J'essaie d'utiliser le filtre de date d'Angular pour les transformer en quelque chose de plus joli, mais ...
{{Objected.created | date:'shortDate'}}
ou
{{Objected.created | date:'YYYY'}}
... crache simplement la chaîne de date/heure originale: 2013-11-21 17:43:20
. Il n'y a pas d'erreur. Qu'est-ce que je fais mal?
Update Je constate que la date/heure par défaut de MySQL est incompatible avec les attentes du filtre de données d'Angular. J'essaye de le convertir à la volée comme ça, mais ça jette des erreurs:
<li ng-repeat="result in data">{{ new Date(result.Job.created).toISOString() | date:'shortDate'}}</li>
Je soupçonne que je ne peux pas instancier la classe Date de la manière que j'essaie. L'erreur est une erreur $ parse: syntax.
Mettre à jour
Grâce à l'aide de @ m59, je l'ai obtenu avec quelques ajustements mineurs ...
HTML:
<html ng-app="myApp">
...
{{Object.created | dateToISO | date:'shortDate'}}
JS:
var myApp = angular.module('myApp',[]);
myApp.filter('dateToISO', function() {
return function(input) {
input = new Date(input).toISOString();
return input;
};
});
Ce filtre personnalisé convertit la date et l'heure MySQL par défaut au format attendu par le filtre de date. Je l'envoie donc une à une, puis à l'autre.
Vous devez convertir votre chaîne de date en un format pris en charge par Angular, tel que le format ISO 8601. Vous pouvez le convertir comme ceci:
$scope.Object.created = new Date($scope.Object.created).toISOString();
Pour ce faire à la volée, vous avez besoin d’un filtre personnalisé. Live demo here (click).
Balisage:
<div>{{Object.created | dateToISO | date:'shortDate'}}</div>
JavaScript:
app.filter('dateToISO', function() {
return function(input) {
return new Date(input).toISOString();
};
});
Voici un moyen simple de convertir votre date manuellement (firefox):
app.filter('badDateToISO', function() {
return function(badTime) {
var goodTime = badTime.replace(/(.+) (.+)/, "$1T$2Z");
return goodTime;
};
});
Le format de date que vous avez spécifié est incorrect YYYY
devrait être yyyy
, regardez le documentation pour un autre exemple.
De plus, la chaîne de date que vous essayez de formater ne correspond pas à la spécification de Angular.
Date à formater en tant qu'objet Date, millisecondes (chaîne ou nombre) ou divers formats de chaîne datetime ISO 8601 (par exemple, aaaa-MM-jjTHH: mm: ss.SSSZ et ses versions abrégées comme yyyy-MM-jjTHH: mmZ, yyyy-MM. -dd ou yyyyMMddTHHmmssZ). Si aucun fuseau horaire n'est spécifié dans l'entrée chaîne, l'heure est considérée comme étant dans le fuseau horaire local.
Où que vous récupériez la chaîne d'origine, je vous suggère de la stocker/essayer de la récupérer dans l'un de ces formats.
Exemple JSFiddle en utilisant un format correct.
J'ai créé un tuyau
import { Pipe } from "@angular/core";
@Pipe ({ Name: DateToIso '}) Classe d'exportation DateToIso {
transform(value, args) {
var regex=/^([0-9]{2,4})-([0-1][0-9])-([0-3][0-9]) (?:([0-2][0-9]):([0-5][0-9]):([0-5][0-9]))?$/;
var parts=value.replace(regex,"$1 $2 $3 $4 $5 $6").split(' ');
var converted = new Date(parts[0],parts[1]-1,parts[2],parts[3],parts[4],parts[5]);
let newValue = converted.toISOString();
return newValue;
}
}
et ensuite à utiliser dans le modèle
{{ p.sessionTimeFinish | DateToIso | date: "HH:mm" }}
J'ai créé un tuyau pour cela comme suit
import { Pipe } from "@angular/core";
@Pipe ({ Name: 'DateToIso' }) Classe d'exportation DateToIso {
transform(value, args) {
var regex=/^([0-9]{2,4})-([0-1][0-9])-([0-3][0-9]) (?:([0-2][0-9]):([0-5][0-9]):([0-5][0-9]))?$/;
var parts=value.replace(regex,"$1 $2 $3 $4 $5 $6").split(' ');
var converted = new Date(parts[0],parts[1]-1,parts[2],parts[3],parts[4],parts[5]);
let newValue = converted.toISOString();
return newValue;
}
}