source

기본 MySQL 날짜 시간을 포맷할 수 없습니다.

ittop 2023. 10. 29. 20:00
반응형

기본 MySQL 날짜 시간을 포맷할 수 없습니다.

내 날짜는 데이터베이스에서 다음과 같이 나옵니다.2013-11-21 17:43:20

앵귤러의 데이트 필터를 이용해서 더 예쁜 걸로 만들려고 하는데...

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

아니면

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

...그냥 원래 날짜 시간 문자열을 말합니다.2013-11-21 17:43:20. 오류가 없습니다.내가 뭘 잘못하고 있는 거지?

업데이트 MySQL의 기본 날짜 시간이 Angular의 데이터 필터에서 예상하는 것과 호환되지 않음을 알 수 있습니다.이렇게 즉석에서 변환을 시도하고 있는데 오류가 발생하고 있습니다.

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

제가 시도하는 방식으로는 Date 클래스를 인스턴스화할 수 없을 것 같습니다.오류는 $parse: 구문 오류입니다.

갱신하다

@m59의 도움 덕분에 몇 가지 사소한 조정을 통해 해결할 수 있었습니다.

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

이 사용자 지정 필터는 기본 MySQL 날짜 시간을 날짜 필터가 예상하는 형식으로 변환하므로 하나씩 던지고 "voila"를 보냅니다.

날짜 문자열을 ISO 8601 형식과 같이 Angular에서 지원하는 것으로 변환해야 합니다.다음과 같이 변환할 수 있습니다.

$scope.Object.created = new Date($scope.Object.created).toISOString();

라이브 데모는 여기서(클릭)

이 작업을 신속하게 수행하려면 사용자 지정 필터가 필요합니다.라이브 데모는 여기서(클릭)

마크업:

<div>{{Object.created | dateToISO | date:'shortDate'}}</div>

자바스크립트:

app.filter('dateToISO', function() {
  return function(input) {
    return new Date(input).toISOString();
  };
});

업데이트:

다음은 수동으로 날짜를 변환하는 간단한 방법입니다(파이어폭스).

app.filter('badDateToISO', function() {
  return function(badTime) {
    var goodTime = badTime.replace(/(.+) (.+)/, "$1T$2Z");
    return goodTime;
  };
});

지정한 날짜 형식이 잘못되었습니다.YYYY그래야 한다yyyy, 다른 예를 위해 설명서를 봅니다.

또한 포맷하려는 날짜 문자열이 Angular가 가지고 있는 사양과 일치하지 않습니다.

날짜 개체, 밀리초(문자열 또는 숫자) 또는 다양한 ISO 8601 날짜 시간 문자열 형식(예: yyy-MM-ddTHH:mm:ss.SSZ 및 yyy-MM-ddTHH:mmZ, yyy-MM-dd 또는 yyyy와 같은 짧은 버전)으로 포맷할 날짜MMDDTHHmssZ).문자열 입력에 시간대가 지정되지 않은 경우 시간은 로컬 시간대인 것으로 간주됩니다.

원본 문자열을 검색하는 곳에 상관없이 이 형식 중 하나로 저장/검색할 것을 권장합니다.

올바른 형식을 사용하는 JSFiddle 예제.

나는 이것을 위해 다음과 같이 파이프를 만들었습니다.

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

@Pipe({이름: 'DateToIso'}) 클래스 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;

}

}

나는 파이프를 만들었습니다.

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

@파이프({ 이름:DateToIso' }) 클래스 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;

}

}

템플릿에 사용할 수 있습니다.

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

각2 파이프

import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
  name: 'toIso'
})
export class ToIsoPipe implements PipeTransform {
  transform(value: string): unknown {
    return value.replace(' ', 'T');
  }
}

// INPUT : "2020-08-20 09:00:20"
// OUTPUT : "2020-08-20T09:00:20"

{{response.created | toIso | date:'MMM d, h:mm a'}}

언급URL : https://stackoverflow.com/questions/20709910/unable-to-format-default-mysql-datetime

반응형