- SAP UI5 日期类型 sap.ui.model.type.D
- SAP UI5 日期类型 sap.ui.model.type.D
- 关于 SAP UI5 参数 $$updateGroupId 前面
- SAP UI5 设备类型检测 Device API 的工作原理
- 通过 FileUploader 的初始化,了解 SAP UI5
- 关于 SAP UI5 设备类型检测的实现原理
- Fiori-like Prototype ( 2021 SAP
- 如何通过 ABAP 代码给 SAP OData 元数据增添注解试
- SAP UI5 Smart Table 和 Smart Filt
- SAP UI5 Gateway Export 和 Client
我开发了一个 SAP UI5 应用,使用了数据类型 sap.ui.model.type.Date
,并且指定了显示格式 pattern
为:yyyy-MM-ddTHH:mm:ss
:
![](https://img.haomeiwen.com/i2085791/3b989e6957842951.png)
<ObjectAttribute title="{i18n>dateTitle}" text="{
path: 'invoice>ShippedDate',
type: 'sap.ui.model.type.Date',
formatOptions: {
style: 'long',
source: {
pattern: 'yyyy-MM-ddTHH:mm:ss'
}
}
}"/>
这个字段绑定的数据源的值为:2015-04-01T01:20:59
我期望在 SAP UI5 上显示的格式为 某年-某月-某日-T-小时-分-秒
,但是最后的显示效果如下图:April 1,2015
![](https://img.haomeiwen.com/i2085791/eae8884e11538ed4.png)
本文介绍如何分析这个显示格式的问题。
我们在 Chrome 开发者工具里找到 sap.ui.model.type.Date
的实现文件地址:
sap/ui/model/type/Date.js
![](https://img.haomeiwen.com/i2085791/8e583e0d68f77393.png)
首先在函数 Date1.prototype.formatValue
设置断点,观察到字符串类型的原始值,已经成功传入该函数了:
![](https://img.haomeiwen.com/i2085791/a2af707848c0847e.png)
sInternalType
的值:string
![](https://img.haomeiwen.com/i2085791/58066f7faadb2901.png)
string 类型的 PrimitiveType
值就为其本身。
该逻辑定义在如下函数里:
SimpleType.prototype.getPrimitiveType = function (sInternalType) {
// Avoid dealing with type objects, unless really necessary
switch (sInternalType) {
case "any":
case "boolean":
case "int":
case "float":
case "string":
case "object":
return sInternalType;
default:
var oInternalType = DataType.getType(sInternalType);
return oInternalType && oInternalType.getPrimitiveType().getName();
}
};
从模型中拿到格式数据的模板:
![](https://img.haomeiwen.com/i2085791/85a0940a8f91e2fd.png)
比如一周七天的缩写单词,存储在 aDaysAbbrev
里:
![](https://img.haomeiwen.com/i2085791/f5833e49e4a00355.png)
一年 12 个月的单词,存储在 aMonthsWide
里:
![](https://img.haomeiwen.com/i2085791/2dbf820c33ea0610.png)
进入 parse 函数内部,Calendar type 为:Gregorian
,意思是阳历
。
![](https://img.haomeiwen.com/i2085791/6987b4985a50c61a.png)
Calendar type 为枚举值,所有支持的 calendar 类型如下图所示:
![](https://img.haomeiwen.com/i2085791/48e5dfbf1bbe2632.png)
格式化数组的值:aFormatArray
![](https://img.haomeiwen.com/i2085791/f8f80e7ee2e06821.png)
已经成功解析出 2015年4月2日了:
![](https://img.haomeiwen.com/i2085791/f8c72c1c242fb000.png)
开始解析:T01:20:30
![](https://img.haomeiwen.com/i2085791/8f81a02781ef67ce.png)
所有可能的日期分隔符
:
\u002d\u007E\u2010\u2011\u2012\u2013\u2014\ufe58\ufe63\uff0d\uFF5E
![](https://img.haomeiwen.com/i2085791/c704822eee8a0d1d.png)
在 Dateformat.js
函数的 _parse
函数的返回值,已经观察到小时,分和秒已经成功解析了。所以问题没有出在解析,而是在值的显示上。
![](https://img.haomeiwen.com/i2085791/5dff6d7bd0ded151.png)
最后返回的值:Thu Apr 02 2015 01:20:30 GMT+0800 (China Standard Time
![](https://img.haomeiwen.com/i2085791/fee10b38cc5d990b.png)
更多Jerry的原创文章,尽在:"汪子熙":
![](https://img.haomeiwen.com/i2085791/97c4752c0e619c44.png)
网友评论