使用Date.parse()以外的选项

时间:2016-09-30 21:42:19

标签: javascript date parsing sapui5

以下是我需要做的事情:

我有ISO 8601格式dateString dateString = "2016-09-30T04:00:00.000+0000"  我需要解析并生成一个可读日期“September 30, 2016

这是我的格式化程序sap.ui.core.format.DateFormat,它为我做了这个。

return dateFormatter.format(new Date(dateString));

问题是,根据MDN

  

建议不要使用Date.parse直到ES5,解析   字符串完全取决于实现。还有很多   不同主机解析日期字符串的差异,因此是日期   字符串应该手动解析(如果很多,库可以帮助   要适应不同的格式。)

     
      
  • 直接致电:Date.parse(dateString)
  •   
  • 隐含电话:new Date(dateString)
  •   

因此我的格式化程序会调用Date.parse()

是否有更好的做法可以按照MDN的建议进行此类手动解析? 是否有任何SAPUI5方法可以实现这一目标?

1 个答案:

答案 0 :(得分:0)

在大多数引擎中解析ISO日期应该是一致的,但是不能保证,定义Date对象的正确方法总是传递整数参数,如下所示

new Date(year, month[, day[, hour[, minutes[, seconds[, milliseconds]]]]]);

但看到你想要一个包含月份等的字符串,而不是一个对象,最一致的方法就是自己简单地解析日期

var dateString = "2016-09-30T04:00:00.000+0000";

var months = [
  '', 'January', 'February', 'March', 'April',
  'May', 'June', 'July', 'August', 'September',
  'October', 'November', 'December'
];

var parts  = dateString.split(/[-T:.]/);
var parsed = months[+parts[1]] + ' ' + parts[2] + ', ' + parts[0];

document.body.innerHTML = parsed; // September 30, 2016