私の日付は次のようにデータベースから出力されます:2013-11-21 17:43:20
Angularの日付フィルターを使用して、よりきれいなものにしようとしていますが...
{{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:syntaxエラーです。
更新
@ 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日時を日付フィルターが期待する形式に変換するため、次々とスローして「出来上がり」に送信します。
日付文字列を、AngularがサポートするISO 8601形式などに変換する必要があります。次のように変換できます。
$scope.Object.created = new Date($scope.Object.created).toISOString();
その場でこれを行うには、カスタムフィルターが必要です。 ここでライブデモ(クリック)
マークアップ:
<div>{{Object.created | dateToISO | date:'shortDate'}}</div>
JavaScript:
app.filter('dateToISO', function() {
return function(input) {
return new Date(input).toISOString();
};
});
日付を手動で変換する簡単な方法を次に示します(firefox)。
app.filter('badDateToISO', function() {
return function(badTime) {
var goodTime = badTime.replace(/(.+) (.+)/, "$1T$2Z");
return goodTime;
};
});
指定した日付形式が正しくありませんYYYY
はyyyy
である必要があります。他の例については documentation を参照してください。
さらに、フォーマットしようとしている日付文字列は、Angularの仕様と一致しません。
日付オブジェクト、ミリ秒(文字列または数値)、またはさまざまなISO 8601日時文字列形式(例:yyyy-MM-ddTHH:mm:ss.SSSZおよびyyyy-MM-ddTHH:mmZ、yyyy-MMなどの短いバージョン)としてフォーマットする日付-ddまたはyyyyMMddTHHmmssZ)。文字列入力でタイムゾーンが指定されていない場合、時刻はローカルタイムゾーンであると見なされます。
元の文字列をどこから取得する場合でも、これらの形式のいずれかで保存/取得することをお勧めします。
例 JSFiddle 正しい形式を使用します。
パイプを作りました
import { Pipe } from "@angular/core";
@Pipe({name: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" }}
このためのパイプを次のように作成しました
import { Pipe } from "@angular/core";
@Pipe({name: '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;
}
}