【问题标题】:I'm getting JavaScript error "d.getMonth is not a function" when trying to format a date using d3.time.format尝试使用 d3.time.format 格式化日期时出现 JavaScript 错误“d.getMonth 不是函数”
【发布时间】:2016-06-06 17:59:50
【问题描述】:

我有一个日期值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)

【问题讨论】:

  • 您使用的是哪个版本的d3,错误发生在哪个浏览器上?

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


【解决方案1】:

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

【讨论】:

  • 是的,还有一个 javascript 陷阱 - Date.parse 不返回 Date
【解决方案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)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-28
    • 1970-01-01
    • 2018-06-01
    • 1970-01-01
    • 2015-12-26
    • 1970-01-01
    • 2017-11-16
    • 1970-01-01
    相关资源
    最近更新 更多