我在尝试使用 d3.time.format 格式化日期时收到 JavaScript 错误 "d.getMonth is not a function"

I'm getting JavaScript error "d.getMonth is not a function" when trying to format a date using d3.time.format

我有一个日期值 2016-02-18,我想将其转换为 Feb 18

我试过下面的代码,但是 returns 一个错误,get.month 不是一个函数。我也尝试过使用 format.parse(),但也没有用。

我的代码:

var dateLast = "2016-02-18";
var date = Date.parse(dateLast.replace(/-/g,"/"));
var format =  d3.time.format("%b-%d");
var dateConvert = format(date);
console.log(dateConvert);

错误信息:

TypeError: d.getMonth is not a function at d3_time_formats.b (d3.js:2517) at format (d3.js:2431)

您需要将 Date 对象传递给 format 函数(参见 documentation):

var dateLast = "2016-02-18";
var date = Date.parse(dateLast.replace(/-/g,"/"))
var format = d3.time.format("%b-%d");
var dateConvert = format(new Date(date))
console.log(dateConvert)

D3.js 方式:

使用 d3.time.format,实现您的目标的最有效方法是:

var dateLast = "2016-02-18";
var format = d3.time.format("%b %d");
var dateConvert = format(new Date(dateLast));

alert(dateConvert); // Output : Feb 18

(另见 this Fiddle

所以,基本上,您根本不需要 dateLast.replaceDate.parse。您可以直接使用日期字符串作为 new Date().

的输入

普通 JS 方式:

就个人而言,我什至根本不会使用 d3(或任何其他库)来格式化日期。您可以使用大致相同数量的代码在 vanilla JS 中完成它:

var dateLast = "2016-02-18";
var format = { month : 'short', day : 'numeric' };
var dateConvert = new Date(dateLast).toLocaleDateString('en-US', format);

alert(dateConvert); // Output : Feb 18

(另见 this Fiddle)。