SAP UI5日期字段的显示逻辑和用法
Sent: Tuesday, December 23, 2014 2:27 PM
這里是Opportunity Notes UI上Date Format的邏輯:
<FeedListItem sender="{path : 'json>Creator'}" senderActive="false" timestamp="{path:'json>CreatedAt' , formatter: 'cus.crm.opportunity.util.Formatter.notesDateFormatter'}" text="{path : 'json>Content'}" />每一條Notes Item上面都可以綁定一個Date Formatter,對應的是Formatter.js文件下的notesDateFormatter方法:
notesDateFormatter: function (oValue) { if(oValue === "" || oValue === null || oValue === undefined)return ""; if(!(oValue instanceof Date)){ // 轉換成javascript標準的Date對象oValue = new Date(oValue);}// 下面這行將當前日期和GMT標準時間的時間差算出來,然后換算成GMT標準時間,然后再用GMT的時間做Format.// 這個做法感覺有點別扭,只是為了把日期format成GMT的string,但是已經把oValue這個日期對象的值改變了,如果接下來還要用oValue做別的事情或者顯示的日期時間需 // 要根據configuration里面的locale來顯示就會有問題。oValue.setMinutes(oValue.getTimezoneOffset()); var locale = new sap.ui.core.Locale(sap.ca.scfld.md.app.Application.getImpl().getResourceBundle().sLocale); // 用DateFormatter來Format日期 var formatter = sap.ca.ui.model.format.DateFormat.getDateInstance({style : "medium"},locale); return formatter.format(oValue);},處理GMT時間差之前的時間:
處理GMT時間差之后的時間:
可以看到時區沒變,但是從小時上減去了8個小時,相當于日期對象的值已經變了。
關于Note的時間要支持到時分秒,有兩種辦法:
UI5除了Date Format, 還提供了DateTime Format:
給Date Format傳入時分秒的pattern:
這里就可以看出來,如果要支持顯示時區的話,直接用原來的代碼就有問題,時間應該是+8區的14點,而不是+8區的6點。
具體的日期Format的邏輯可以看sap.ui.core.format.DateFormat.js里面的code。
有時間的時候看一下前臺怎么顯示note creation date的吧:
QHD/504, Opp id 5576
后臺返回5個note,已經按照timestamp排好序了。
5條都是今天創建的,
為什么我最早創建的反而是2014-12-22, 而最新的4條顯示的是2014-12-21創建的?
要獲取更多Jerry的原創文章,請關注公眾號"汪子熙":
總結
以上是生活随笔為你收集整理的SAP UI5日期字段的显示逻辑和用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TCP和Web Socket混合使用的一
- 下一篇: SAP UI5日期字段关于时区GMT的处