我开发了一个 SAP UI5 利用,应用了数据类型 sap.ui.model.type.Date,并且指定了显示格局 pattern 为:yyyy-MM-ddTHH:mm:ss

<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

本文介绍如何剖析这个显示格局的问题。

咱们在 Chrome 开发者工具里找到 sap.ui.model.type.Date 的实现文件地址:

sap/ui/model/type/Date.js

首先在函数 Date1.prototype.formatValue 设置断点,察看到字符串类型的原始值,曾经胜利传入该函数了:

sInternalType 的值:string

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();        }    };

从模型中拿到格局数据的模板:

比方一周七天的缩写单词,存储在 aDaysAbbrev 里:

一年 12 个月的单词,存储在 aMonthsWide 里:

进入 parse 函数外部,Calendar type 为:Gregorian,意思是阳历

Calendar type 为枚举值,所有反对的 calendar 类型如下图所示:

格式化数组的值:aFormatArray

曾经胜利解析出 2015年4月2日了:

开始解析:T01:20:30

所有可能的日期分隔符

\u002d\u007E\u2010\u2011\u2012\u2013\u2014\ufe58\ufe63\uff0d\uFF5E

Dateformat.js 函数的 _parse 函数的返回值,曾经察看到小时,分和秒曾经胜利解析了。所以问题没有出在解析,而是在值的显示上。

最初返回的值:Thu Apr 02 2015 01:20:30 GMT+0800 (China Standard Time

更多Jerry的原创文章,尽在:"汪子熙":