尝试使用d3.time.format格式化日期时,我收到JavaScript错误“d.getMonth不是函数”

时间:2016-02-24 12:30:02

标签: javascript date d3.js date-format time-format

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

我尝试了以下代码,但它返回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不是d3_time_formats.b中的函数   (d3.js:2517)格式(d3.js:2431)

2 个答案:

答案 0 :(得分:4)

您需要将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)

答案 1 :(得分:2)

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)。