[javascript] Impossibile formattare il valore predefinito di MySQL datetime



Answers

Il formato della data specificato è sbagliato YYYY dovrebbe essere yyyy , guarda la documentazione per altri esempi.

Inoltre, la stringa di data che stai tentando di formattare non corrisponde alle specifiche che Angular ha.

Data di formattazione come oggetto Date, millisecondi (stringa o numero) o vari formati di stringa datetime ISO 8601 (ad es. Yyyy-MM-ddTHH: mm: ss.SSSZ e le sue versioni più corte come yyyy-MM-ddTHH: mmZ, yyyy-MM -dd o yyyyMMddTHHmmssZ). Se non viene specificato fuso orario nell'input della stringa, l'ora viene considerata nel fuso orario locale.

Ovunque tu stia recuperando la stringa originale, ti suggerisco di archiviare / cercare di recuperarla in uno di questi formati.

Esempio JSFiddle utilizzando un formato corretto.

Question

Le mie date escono dal database in questo modo: 2013-11-21 17:43:20

Sto cercando di usare il filtro data di Angular per trasformarli in qualcosa di più carino, ma ...

{{Objected.created | date:'shortDate'}}

o

{{Objected.created | date:'YYYY'}}

... sputa solo la stringa datetime originale: 2013-11-21 17:43:20 . Non ci sono errori Che cosa sto facendo di sbagliato?

Aggiornamento Vedo che il datetime predefinito di MySQL è incompatibile con quello che il filtro dei dati di Angular si aspetta. Sto provando a convertirlo al volo in questo modo ma si tratta di errori di lancio:

<li ng-repeat="result in data">{{ new Date(result.Job.created).toISOString() | date:'shortDate'}}</li>

Sospetto che non sia possibile creare un'istanza della classe Date nel modo in cui sto provando. L'errore è un $ parse: errore di sintassi.

Aggiornare

Grazie all'aiuto di @ m59, ho funzionato con alcuni piccoli aggiustamenti ...

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

Questo filtro personalizzato converte il datetime MySQL predefinito nel formato che il filtro di data si aspetta, quindi lo mando uno dopo l'altro e "voilà".




Ho creato una pipa

import { Pipe } from "@angular/core";

@Pipe ({name: DateToIso '}) export class 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;

}

}

e quindi da utilizzare nel modello

{{ p.sessionTimeFinish | DateToIso  |  date: "HH:mm" }}



Links