UI5中OData返回日期转换为仅日期格式的问题
解决UI5中OData非标准日期格式的格式化问题
我明白你的困扰——OData返回的这种带时区的日期字符串确实没法直接用UI5默认的Date类型解析,因为它默认只认ISO 8601格式(比如2018-04-09T00:00:00Z)或者时间戳。下面给你两种靠谱的解决方案:
方案一:自定义格式化函数(最稳妥,兼容性强)
这种方法直接自己解析字符串转成Date对象,再按需求格式化,不用担心不同环境的格式差异。
- 在你的控制器里添加一个格式化函数:
formatDateToDMY: function(sRawDate) { if (!sRawDate) return ""; // 处理空值情况 const oDate = new Date(sRawDate); // 注意月份是从0开始的,所以要+1 const day = String(oDate.getDate()).padStart(2, '0'); const month = String(oDate.getMonth() + 1).padStart(2, '0'); const year = oDate.getFullYear(); return `${day}/${month}/${year}`; }
- 在XML视图里调用这个函数:
<Text text="{ path: 'MyoDataService>ExecuteDay', formatter: '.formatDateToDMY' }"/>
方案二:给Date类型指定Source解析格式
如果你更想用UI5自带的类型系统,可以配置source参数告诉它如何解析输入的字符串格式:
<Text text="{ path: 'MyoDataService>ExecuteDay', type: 'sap.ui.model.type.Date', formatOptions: { pattern: 'dd/MM/yyyy' }, source: { pattern: 'EEE MMM dd yyyy HH:mm:ss zzzz' } }"/>
不过要注意:不同浏览器对日期toString的输出格式可能有细微差异,这种方式可能存在兼容性问题,不如自定义函数稳妥。
额外建议
如果能协调后端的话,最好让OData服务返回标准ISO 8601格式的日期,这样前端直接用默认的Date类型就能轻松格式化,省去很多麻烦~
内容的提问来源于stack exchange,提问作者Juan
相关产品推荐
相关产品推荐

