26

「2003-02-01」(ymd) に日付を格納する csv 列 (日付) があります。日付を 2003 年 4 月のように月と年でフォーマットしたいのですが、どうすればよいですか?

var format = d3.time.format("%m-%Y");
data.forEach(function(d,i) {
d.date = format(d.date);
});

次のエラー エラーが表示されます。TypeError: n.getFullYear is not a function Line: 5

csv ファイルには次の値が含まれます。

200,300,400,288,123,2003-01-01
300,700,600,388,500,2003-02-01

ここでの問題は何ですか?

4

5 に答える 5

35

Javascript は、CSV ファイルの値を日付として自動的に認識せず、文字列として読み取るだけです。d3 の時刻関数を使用すると、日時オブジェクトに簡単に変換できます。

> parseDate = d3.time.format("%Y-%m-%d").parse
> parseDate('2003-01-01')
Wed Jan 01 2003 00:00:00 GMT-0600 (Central Standard Time)

必要に応じて日付をフォーマットするには、日付オブジェクトから文字列に変換する必要があります。

> formatDate = d3.time.format("%b-%Y")
> formatDate(parseDate('2003-01-01'))
"Jan-2003"

プログラム内で日付を日付オブジェクトで表し、表示する必要がある場合にのみ文字列としてフォーマットすることをお勧めします。

于 2013-07-18T14:25:34.893 に答える
2

Adam の回答から、時間文字列をある形式から別の形式に変換するための小さなヘルパー関数を次に示します。

var formatTime = function(input, formatInput, formatOutput){
    var dateParse = d3.time.format(formatInput).parse;
    var dateFormat = d3.time.format(formatOutput);
    return dateFormat(dateParse(input));
};

使用する:

formatTime("2003-01-01", "%Y-%m-%d", "%b-%Y");

// output -> "Jan-2003"
于 2015-08-30T17:24:23.697 に答える