2016-11-21 35 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上提交請求。如果沒有在所有控制器上覆制格式化程序,使用此功能會更酷。 –