如何使用Javascript将ISO 8601日期格式化为更可读的格式?

如何使用Javascript将ISO 8601日期格式化为更可读的格式?,javascript,html,date,date-format,time-format,Javascript,Html,Date,Date Format,Time Format,我正在使用API从帖子中调用日期 日期以以下格式返回: 我希望我的日期格式如下: 09/11/2015 $(data).each(function(){ var html = '<randomhtml> '+this.created_at+' <randomhtml> $('#stream').append(html); }); 然后,稍后,我想将它们插入到我的HTML中,如下所示: 09/11/2015 $(data).each(function(

我正在使用API从帖子中调用日期

日期以以下格式返回:

我希望我的日期格式如下:

09/11/2015
$(data).each(function(){
    var html = '<randomhtml> '+this.created_at+' <randomhtml>
    $('#stream').append(html);
});
然后,稍后,我想将它们插入到我的HTML中,如下所示:

09/11/2015
$(data).each(function(){
    var html = '<randomhtml> '+this.created_at+' <randomhtml>
    $('#stream').append(html);
});
$(数据)。每个(函数(){
var html=''+这个。在+'创建
$('#stream').append(html);
});

有人知道如何将日期更改为正确的格式吗?

最简单的方法就是使用字符串

$(data).each(function(){

    var date = this.created_at.split('T') // split on the "T"   -> ["2015-11-09", "10:..."]
                              .shift()    // get the first part -> "2015-11-09"
                              .split('-') // split again on "-" -> ["2015", "11", "09"]
                              .reverse()  // reverse the array  -> ["09", "11", "2015"]
                              .join('/')  // join with "/"      -> "09/11/2015"

    var html = '<randomhtml> ' + date + ' <randomhtml>';
    $('#stream').append(html);
});
$(数据)。每个(函数(){
var date=this.created_at.split('T')//在“T”->[“2015-11-09”,“10:…”上拆分]
.shift()//获取第一部分->“2015-11-09”
.split('-')//在“-”上再次拆分[“2015”、“11”、“09”]
.reverse()//反转数组->[“09”、“11”、“2015”]
.join(“/”)//以“/”->“09/11/2015”加入
var html=''+日期+'';
$('#stream').append(html);
});
由于它是UTC日期,只需将其传递到do
new date()
会增加时区的差异,而不总是输出正确的日期。
如果需要验证日期,可以使用正则表达式检查有效的UTC日期。

所有浏览器 使用当前使用的源格式格式化日期的最可靠方法是应用以下步骤:

  • 使用您的时间字符串作为新日期()的输入。
  • 使用
    .getDate()
    .getMonth()
    .getFullYear()
    分别获取日期、月份和年份
  • 根据您的目标格式将各部分粘贴在一起
  • 下面的
    格式
    功能向您展示了组合这四个步骤的最佳方法:

    var日期='2015-11-09T10:46:15.097Z';
    函数格式(输入){
    var日期=新日期(输入);
    返回[
    (“0”+date.getDate()).slice(-2),
    (“0”+(date.getMonth()+1)).slice(-2),
    date.getFullYear()
    ]。加入(“/”);
    }
    document.body.innerHTML=格式(日期);//输出:2015年11月9日
    对于日期操纵库非常有用


    如果您想使日期格式取决于用户所在国家/地区,您可以另外使用。

    这可以解决您的问题

    var date = new Date('2015-11-09T10:46:15.097Z');
    alert((date.getMonth() + 1) + '/' + date.getDate() + '/' +  date.getFullYear());
    

    输出将为“09/11/2015”

    重新格式化日期字符串最简单、最可靠的方法就是重新格式化字符串。因此,使用split(或match)获取值并按您想要的顺序返回它们,忽略您不需要的位,例如:

    函数等速{
    var b=s.split(/\D/);
    返回b[2]+'/'+b[1]+'/'+b[0];
    }
    
    文件编写(isoToDMY('2015-11-09T10:46:15.097Z')
    如果您正在链接方法,那么最好在一个-
    中完成此操作。在.split(“T”)[0]处创建。split(“-”).reverse().join(“/”)-尽管添加注释解释其输入和输出是一个非常好的主意,并且可能会进行一些错误检查以确保输入符合您期望的格式。输入和输出是OP想要的,因为这两个都在问题中指定。我用了两行文字让它更可读一点。我在发布之前检查过->我不是说你错了。我是说,这种模糊程度的代码应该包括注释,以便向未来的开发人员解释其操作。错误检查是为了确保源数据格式没有从其他地方的代码更改,这可能会导致此处出现意外行为。要重新格式化字符串,只需要一个拆分(或匹配)加上一个用于格式化的语句。调用6个方法这样做似乎不明智。这不是一个答案。通常不建议使用日期构造函数来解析字符串(或Date.parse,它们是等效的),因为这是不可靠的。即使是符合ISO 8601的字符串也没有被所有使用中的浏览器正确解析。@RobG:
    即使是符合ISO 8601的字符串也没有被所有使用中的浏览器正确解析。
    -您知道有任何来源可以确认ISO 8601日期字符串的解析不正确吗?或者有哪些浏览器受到影响的细节?另外,您会推荐哪种替代方法?手动将ISO 8601解析为其组件?IE 8(按版本计算是第三高的,是Safari所有版本总和的两倍)根本不会解析ISO 8601字符串。一些人将2016-02-25等日期解析为UTC,另一些人将其解析为本地日期。建议手动解析,如果您只需要解析一种格式,则库可以提供帮助,但不是必需的。@RobG:谢谢您的反馈。我添加了一个说明来解决这个问题。