如何使用Javascript将ISO 8601日期格式化为更可读的格式?
我正在使用API从帖子中调用日期 日期以以下格式返回: 我希望我的日期格式如下:如何使用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(
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日期,只需将其传递到donew 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:谢谢您的反馈。我添加了一个说明来解决这个问题。