web-dev-qa-db-ja.com

デフォルトのMySQL日時をフォーマットできません

私の日付は次のようにデータベースから出力されます: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日時を日付フィルターが期待する形式に変換するため、次々とスローして「出来上がり」に送信します。

25
emersonthis

日付文字列を、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;
  };
});
64
m59

指定した日付形式が正しくありませんYYYYyyyyである必要があります。他の例については documentation を参照してください。

さらに、フォーマットしようとしている日付文字列は、Angularの仕様と一致しません。

日付オブジェクト、ミリ秒(文字列または数値)、またはさまざまなISO 8601日時文字列形式(例:yyyy-MM-ddTHH:mm:ss.SSSZおよびyyyy-MM-ddTHH:mmZ、yyyy-MMなどの短いバージョン)としてフォーマットする日付-ddまたはyyyyMMddTHHmmssZ)。文字列入力でタイムゾーンが指定されていない場合、時刻はローカルタイムゾーンであると見なされます。

元の文字列をどこから取得する場合でも、これらの形式のいずれかで保存/取得することをお勧めします。

JSFiddle 正しい形式を使用します。

3
Danny

パイプを作りました

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

このためのパイプを次のように作成しました

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;

}

}

0
Michael Coyne