求助!后台返回的时间“2016-10-26T17:31:10”,要在前端分别显示年月日,周几以及具体时间,该怎么显示啊

后台返回的时间格式是“2016-10-26T17:31:10”,要分成,hour、minute、weekday、day、month和year显示。之前想过用字符串分开,除此之外,用new Date('2016-10-26T17:31:10')也试过,果不其然的失败了。
不懂就问,求助!

阅读 4.6k
7 个回答

Chrome,FireFox,IE9+测试可以使用new Date('2016-10-26T17:31:10')

new Date('2016-10-26T17:31:10') 里面的“T”浏览器下面解析有差异,之前被这个坑死了!

为什么我用 new Date('2016-10-26T17:31:10') 成功了?

你什么浏览器?

环境

系统:macOS 10.12
浏览器:chrome 54.0.2840.71 (64-bit)

你是想要什么效果啊?

这样行不:

var str = "2016-10-26T17:31:10";
var strA = str.split(/[a-zA-Z]/);
var d = {}

d.year = strA[0].split('-')[0];
d.month = strA[0].split('-')[1];
d.day = strA[0].split('-')[2];
d.hour = strA[1].split(':')[0];
d.minute = strA[1].split(':')[1];
d.second = strA[1].split(':')[2];
d.weekday = str.match(/[a-zA-Z]/)[0];

话说还是让后端直接传秒数吧...

踩过坑的路过,建议对于这种情况提前和后台确定好时间的格式,然后不要用

new Date('2016-10-26T17:31:10')

因为你永远不知道其他浏览器是否支持这种格式,确定好格式后,前端自己做日期分割,判断格式是否正确,再使用

new Date(year, month[, date[, hours[, minutes[, seconds[, milliseconds]]]]]);

这样的方式来创建日期对象,就不会有跨浏览器的问题了。
当然,如果使用timestamp的话也是可以的,就是传string会有坑,不同浏览器对于字符串的解析支持不同导致的。

用万能的正则

var a = /^(20\d{2})-(\d{1,2})-(\d{1,2})T(\d{1,2}):(\d{1,2}):(\d{1,2})$/;
a.exec('2016-10-26T17:31:10'); //["2016-10-26T17:31:10", "2016", "10", "26", "17", "31", "10"]
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题