2013-07-18 131 views
19

我在csv中有一個列(日期),它將日期存儲在「2003-02-01」(y-m-d)中。我想在2003年4月份的月份和年份中設置日期的格式。我該怎麼做?D3.js中的日期格式

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 

什麼是這裏的問題?

回答

28

JavaScript不會自動將CSV文件中的值識別爲日期,只是以字符串形式讀取它們。 d3's time functions使它很容易將它們轉換爲datetime objects

> 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" 

我會建議在您的程序中使用日期對象表示日期,並且只有在需要顯示它們時纔將它們格式化爲字符串。

+0

變種格式= d3.time。格式( 「%B-%Y」); var parseDate = d3.time.format(「%Y-%m-%d」)。parse; (函數(d,i)){ d.date = format(parseDate(d.date));我仍然收到錯誤。 –

0

從亞當的答案,這裏是一個小的輔助函數的時間字符串從一種格式轉換爲另一種:

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" 
1

如果你正在約會讓變量說「d =(例如:'2003-03-01')」然後,

var monthNameFormat = d3.time.format("%b-%Y"); 
return monthNameFormat(new Date(d)); 

這將導致日期在「Jan-2003「格式。

-1

D3版本4現在有不同的時間方法。

https://keithpblog.org/post/upgrading-d3-from-v3-to-v4/ https://github.com/d3/d3/blob/master/CHANGES.md

你的源日期

var d = {created_time : "2018-01-15T12:37:30+0000"} 

該日期的結構=%Y-%間 - %的dT%H:%M:%S%Z

我搜索谷歌與「2018-01-15T12:37:30 + 0000」,它的建議提供了日期結構字符串。便利。

創建timeParser轉換(解析)的日期字符串成日期對象

var parseDate = d3.utcParse("%Y-%m-%dT%H:%M:%S%Z") 
//parseDate(d.created_time) 

現在創建一個時間格式返回一個格式化的日期字符串進行顯示。

var formatDate = d3.timeFormat("%b-%Y") 
return formatDate(parseDate(d.created_time)) 

即 揚1970