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

Javascript 使用Date.parse()以外的选项,javascript,date,parsing,sapui5,Javascript,Date,Parsing,Sapui5,以下是我需要做的: 我有一个ISO 8601格式的dateStringdateString=“2016-09-30T04:00:00.000+0000” 我需要解析并生成一个可读的日期“2016年9月30日” 这是我的格式化程序sap.ui.core.format.DateFormat,它为我完成了这项工作 return dateFormatter.format(new Date(dateString)); 问题是,根据 在ES5之前,不建议使用Date.parse as,解析 字符串完全依赖

以下是我需要做的:

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

这是我的格式化程序
sap.ui.core.format.DateFormat
,它为我完成了这项工作

return dateFormatter.format(new Date(dateString));
问题是,根据

在ES5之前,不建议使用Date.parse as,解析 字符串完全依赖于实现。还有很多 不同主机解析日期字符串的方式不同,因此日期 应该手动解析字符串(如果有很多字符串,库可以提供帮助) 应适应不同的格式)

  • 直接调用:
    Date.parse(dateString)
  • 隐式调用:
    新日期(日期字符串)
因此,我的格式化程序无论如何都会调用
Date.parse()

是否有更好的实践来执行MDN推荐的手动解析?
有什么SAPUI5方法可以实现这一点吗?

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

new Date(year, month[, day[, hour[, minutes[, seconds[, milliseconds]]]]]);
但是,鉴于您希望返回一个包含月份等的字符串,而不是一个对象,最一致的方法是自己解析日期

var dateString=“2016-09-30T04:00:00.000+0000”;
风险值月份=[
“一月”、“二月”、“三月”、“四月”,
‘五月’、‘六月’、‘七月’、‘八月’、‘九月’,
“十月”、“十一月”、“十二月”
];
var parts=dateString.split(/[-T:.]/);
分析变量=月[+部分[1]]+''+部分[2]+','+部分[0];

document.body.innerHTML=已解析;//2016年9月30日
在大多数引擎中解析ISO日期应该是一致的,但不能保证,定义日期对象的正确方法始终是传递整数参数,如下所示

new Date(year, month[, day[, hour[, minutes[, seconds[, milliseconds]]]]]);
但是,鉴于您希望返回一个包含月份等的字符串,而不是一个对象,最一致的方法是自己解析日期

var dateString=“2016-09-30T04:00:00.000+0000”;
风险值月份=[
“一月”、“二月”、“三月”、“四月”,
‘五月’、‘六月’、‘七月’、‘八月’、‘九月’,
“十月”、“十一月”、“十二月”
];
var parts=dateString.split(/[-T:.]/);
分析变量=月[+部分[1]]+''+部分[2]+','+部分[0];

document.body.innerHTML=已解析;//2016年9月30日
ES5,我认为ES3上的人很少,如果ES3上有人,那么我怀疑SAPUI5是否有效:),所以我认为您可以使用parse。如果没有,也可以使用moment.js。
Date.parse
在ES5中受支持,但它在引擎中的实现方式仍然不一致,因此您应该自己进行日期解析。@adeneo,该日期看起来像一个格式完美的ISO日期,如果您知道任何浏览器都无法解码的话,我很感兴趣。ISO 8601将与日期构造函数配合使用,因为它是javascript用于ISO日期的标准,我将对
Date.parse
的一般用法进行评论。请注意,文档实际上说的是“一个表示RFC2822或ISO 8601日期的字符串(可能使用其他格式,但结果可能出乎意料)。”,建议不要使用
date.parse
@adeneo-I不信任date来解析字符串。每个OP解析ISO8601需要两行代码,这提供了与任何实现的兼容性。如果需要Z以外的时区偏移,则再多行两行。有许多移动设备和其他设备浏览器没有使用最新的ECMA-262来提高速度。我也不相信RFC 2822,它不是标准的一部分。ES5,我认为ES3上的人很少,如果ES3上有人,那么我怀疑SAPUI5是否有效:),所以我认为您可以使用parse。如果没有,也可以使用moment.js。
Date.parse
在ES5中受支持,但它在引擎中的实现方式仍然不一致,因此您应该自己进行日期解析。@adeneo,该日期看起来像一个格式完美的ISO日期,如果您知道任何浏览器都无法解码的话,我很感兴趣。ISO 8601将与日期构造函数配合使用,因为它是javascript用于ISO日期的标准,我将对
Date.parse
的一般用法进行评论。请注意,文档实际上说的是“一个表示RFC2822或ISO 8601日期的字符串(可能使用其他格式,但结果可能出乎意料)。”,建议不要使用
date.parse
@adeneo-I不信任date来解析字符串。每个OP解析ISO8601需要两行代码,这提供了与任何实现的兼容性。如果需要Z以外的时区偏移,则再多行两行。有许多移动设备和其他设备浏览器没有使用最新的ECMA-262来提高速度。我也不相信RFC 2822,它不是标准的一部分。经过多次讨论、尝试和错误-SAPUI5解决这个问题的方法是使用,或者如果你没有太多的自定义来显示日期。但是,使用此选项将根据区域设置信息或本地计算机的日期时间来设置日期样式。经过多次讨论、尝试和错误后,SAPUI5解决此问题的方法将是使用或如果您没有太多自定义来显示日期。但是,使用此选项将根据区域设置信息或本地计算机的日期时间设置日期样式。