web-dev-qa-db-fra.com

Impossible de formater la date et l'heure MySQL par défaut

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.

25
emersonthis

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

Live demo here (click).

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

Mettre à jour:

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

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.

3
Danny

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" }}
0
Michael Coyne

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;

}

}

0
Michael Coyne