String 仅显示X轴中选定日期的年份(无世纪)

String 仅显示X轴中选定日期的年份(无世纪),string,date,d3.js,date-format,String,Date,D3.js,Date Format,我只在X轴上显示某些日期,并使用tickValues函数从dataPop数组中选择这些日期: xAxisPop.tickValues([dataPop[0].date, dataPop[20].date, dataPop[40].date]) 但是,我希望dataPop[20]。date和dataPop[40]。date只显示年份,而不是世纪,例如,1980年为80 我编写了一个变量formatDate,只显示年份,不显示世纪: formatDate = d3.time.format("%y

我只在X轴上显示某些日期,并使用tickValues函数从dataPop数组中选择这些日期:

xAxisPop.tickValues([dataPop[0].date, dataPop[20].date, dataPop[40].date]) 
但是,我希望dataPop[20]。date和dataPop[40]。date只显示年份,而不是世纪,例如,1980年为80

我编写了一个变量formatDate,只显示年份,不显示世纪:

formatDate = d3.time.format("%y")
但是,如何将formatDate应用于tickValues函数中的dataPop[20]。date,dataPop[40]。date

另外,仅供参考。我的日期目前是字符串。。。所以我想我不应该在formatDate函数中使用d3.time.format,而应该使用另一种d3格式化方法来格式化字符串……对吗?或者我应该先将日期从字符串更改为日期,然后运行formatDate函数吗


非常感谢

您将把格式化程序传递到xAxisPop.tickFormat。任何d3文本格式选项(如tickFormat)都将常规JavaScript函数作为参数。d3.time.format只是一个辅助方法,用于构造公共的方法

在您的情况下,由于日期只是字符串,我建议您只编写自己的格式化函数,也许:

function formatTwoDigitYear(d) { return d.substr(2,2); }

话虽如此,通过尽早将文本年份转换为日期,您可能会看到许多好处。

谢谢,所以我有了formatTwoDigitYear函数,然后我编写了:xAxisPop.tickValues[dataPop[0]。date,dataPop[20]。date,dataPop[40]。date];xAxisPop.tickFormatTwoDigitYear。。。所以现在我在X轴上的所有日期都是两位数。但是,我希望dataPop[0].date和dataPop[40].date能够回到原来的4位数方式,并且只在这两年内使用。有办法吗?顺便说一句,我想我需要将日期保留为字符串,因为我在使用X轴刻度的.rangeroundbands,它将X轴视为类别,而不是数字/日期,因为这是一个条形图。由于格式化程序只是一个常规的JavaScript函数,您可以向其添加逻辑,例如检查dataPop[2].date的大小写。返回d==dataPop[2]。日期?formatTwoDigitYeard:formatFourDigitYeard;