2016-10-27 32 views
5

在以前版本的我的代碼用於設置相應的語言環境的格式是這樣d3.time.format.multi在4.x版

format = { 
    "decimal": ".", 
    "thousands": "", 
    "grouping": [3], 
    "currency": ["€", ""], 
    "dateTime": "%a %b %e %X %Y", 
    "date": "%d-%m-%Y", 
    "time": "%H:%M:%S", 
    "periods": ["AM", "PM"], 
    "days": ["Domenica", "Lunedi", "Martedi", "Mercoledi", "Giovedi", "Venerdi", "Sabato"], 
    "shortDays": ["Do", "Lu", "Ma", "Me", "Gi", "Ve", "Sa"], 
    "months": ["Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"], 
    "shortMonths": ["Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago", "Set", "Ott", "Nov", "Dic"] 
} 

然後

var localeFormatter = d3.locale(format); 

// set time tick format 
var tickFormat = localeFormatter.timeFormat.multi([ 
    ["%H:%M", function (d) { return d.getMinutes(); }], 
    ["%H:%M", function (d) { return d.getHours(); }], 
    ["%a %d", function (d) { return d.getDay() && d.getDate() != 1; }], 
    ["%b %d", function (d) { return d.getDate() != 1; }], 
    ["%B", function (d) { return d.getMonth(); }], 
    ["%Y", function() { return true; }] 
]); 

我終於存儲這些蜱格式設置,所以我可以用它們在我的圖表

D3Preferences['localTimeTickFormat'] = tickFormat; 

更新發布v4.2.8 d3.locale後消失了,我無法弄清楚如何達到相同的結果。

有人能指出我正確的方向嗎? D3的文件沒有幫助我

+0

只是爲了得到這個直線:你的第二個片段是v3代碼,它需要'localeFormatter.time.format.multi'作爲'timeFormat'已經是v4了。 – altocumulus

+2

實際上,您所尋找的不是「d3.locale」的替代品,而是「d3.time.format.multi」,現在處理方式略有不同。檢查模塊的文檔[d3-time-format](https://github.com/d3/d3-time-format#d3-time-format)(第三段開始*「您可以實現更精細的條件時間格式。 ..「*)的解釋。 – altocumulus

回答

0

簡單地你可以做這樣的

d3.formatDefaultLocale(format); 

然後

var tickFormat=function(date){ 
    if(date.getMinutes()) return d3.timeFormat('%H:%M')(date); 
    if(date.getHours()) return d3.timeFormat('%H:%M')(date); 
    if(date.getDay()&&date.getDate()!=1) return d3.timeFormat('%a %d')(date); 
    if(date.getDate()!=1) return d3.timeFormat('%b %d')(date); 
    if(date.getMonth()) return d3.timeFormat('%B')(date); 
    return d3.timeFormat('%Y')(date); 

}

這對我的作品。

0

隨着.multi棄用,你tickFormat()功能現在已經處理過濾邏輯,以及像這樣:

// Establish the desired formatting options using locale.format(): 
var formatDay = d3.timeFormat("%a %d"), 
    formatWeek = d3.timeFormat("%b %d"), 
    formatMonth = d3.timeFormat("%B"), 
    formatYear = d3.timeFormat("%Y"); 

// Define filter conditions 
function tickFormat(date) { 
    return (d3.timeMonth(date) < date ? (d3.timeWeek(date) < date ? formatDay : formatWeek) 
    : d3.timeYear(date) < date ? formatMonth 
    : formatYear)(date); 
} 

Here's an updated version of Mike's original bl.ock(一從中衍生可能性localeFormatter.timeFormat.multi()),設置爲使用條件邏輯@altocumulus上面提到。