如何使用自定义日期格式OData V4 Edm.DateTime值

时间:2016-11-21 16:21:34

标签: date data-binding sapui5 odata-v4

我正在努力格式化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模板中对其进行格式化,或者我是否必须使用自定义格式化程序?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

改进答案:

正如SAP支持所指出的,这是使用OData V4时的方法:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul id="list">
  <li></li>
  <li></li>
  <li></li>
</ul>

重要的是要给出精确度。我的OData服务(ASP.NET WEB API)以毫秒返回datetimeoffset。因此,精度必须设置为3。

原始答案:

此外,由于我遇到了一些问题,这是我使用自定义格式化程序的方法:

为什么你不能使用常见的Date格式的原因是,odata值是一个字符串。我在我的控制器和dateformat.js脚本上使用了自定义格式化程序。

<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'
              }
            }"/>

这是我的格式化程序代码(typescript):

<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'}"/>

任何其他方法都会导致错误。您现在可以根据i18n信息调整日期,这样您就可以针对不同的国家/地区使用不同的格式。我认为还有一个选项可以在dateFormat(...)函数中放入一个区域设置