2016-11-21 87 views
0

我正在努力格式化OData V4 Edm.DateTime值。当我宣布它作为正常datetime值如何使用自定义日期格式OData V4 Edm.DateTime值

<Label text="{ams>Major}.{ams>Minor}.{ams>Build} (
     { 
      path: 'ams>CreationDate', 
      type: 'sap.ui.model.type.Date', 
      formatOptions: { 
      pattern: 'yyyy/MM/dd' 
      } 
     })"/> 

我获得以下错误:

TypeError: j.getTime is not a function 

如果我使用OData的数据类型声明它,没有被格式化。

<Label text="{ams>Major}.{ams>Minor}.{ams>Build} (
     { 
      path: 'ams>CreationDate', 
      type: 'sap.ui.model.odata.type.Date', 
      formatOptions: { 
      pattern: 'yyyy/MM/dd' 
      } 
     })"/> 

提出了例如为:

2016-11-21T17:13:56.207+01:00 

是否有可能直接在XML模板格式,或者我必须使用自定义格式?

回答

0

改进答:

正如SAP支持人士指出,这是使用OData的V4时要走的路:

<Text text="{ 
       path: 'agent>/CurrentVersion/CreationDate', 
       type: 'sap.ui.model.odata.type.DateTimeOffset', 
       constraints: { 
       precision: 3, 
       v4: true 
       }, 
       formatOptions: { 
       pattern: 'dd. MM. yyyy' 
       } 
      }" 
      tooltip="{ 
       path: 'agent>/CurrentVersion/CreationDate', 
       type: 'sap.ui.model.odata.type.DateTimeOffset', 
       constraints: { 
       precision: 3, 
       v4: true 
       }, 
       formatOptions: { 
       pattern: 'dd. MM. yyyy - hh:mm:ss' 
       } 
      }"/> 

最重要的部分是给精度。我的OData服务(ASP.NET WEB API)以毫秒返回datetimeoffset。因此,精度已经被设置为3

原来的答案:

此外,我遇到了一些问题,这是我用自定义格式的方法:

的原因,为什么你不能使用普通的日期格式,那个odata值是以字符串形式出现的。我在我的控制器和dateformat.js脚本上使用了自定义格式化程序。

<Label text="{parts: [{path: 'mymodel>CreationDate', type: 'sap.ui.model.odata.type.Date'}, 
         {path: 'i18n>global.dateformat', type: 'sap.ui.model.type.String'}], 
       formatter: '.odatadateformatter'}"/> 

这里是我的格式化代码(打字稿):

var dateFormat: DateFormatStatic; 
... 
odatadateformatter(datetime: sap.ui.model.odata.type.Date, format?: string): string { 
      if(!format) 
       format = "yy-mm-dd:hh:MM:ss"; 
      return dateFormat(new Date(datetime), format); 
     } 

任何其他方式导致错误。您现在可以根据您的国际信息调整您的日期,以便您可以针对不同国家使用不同的格式。我认为还有一个选项可以放入dateFormat(...)函数中的语言环境

1

我会使用自定义格式化程序。它们是为这种任务而创建的,如果你有多个日期,你可以重新使用相同的格式化程序(这很酷)。

+0

好的,谢谢你的信息。正如我读到的,这在那里使用的OData V2 Model/Edm.DateTime中得到了支持。你知道它是否计划支持类似的合成器?否则,我会在github上的openui5 Repo上提交请求。如果没有在所有控制器上复制格式化程序,使用此功能会更酷。 –