2017-04-10 223 views
0

有誰知道如何在網格中正確格式化DateTime? (這個數據類型是否支持?)。Kendo Angular 2 Grid DateTime格式

無論我放在列的「過濾器」屬性中,我的日期似乎都不會被解析。

我看到顯示該值:/日期(1480643052457)/

任何幫助或建議,不勝感激!

---- ----更新

就像什麼我最後做一個快速更新:我簡單地創建第二個字符串列,並在點返回格式化的日期字符串(即I格式恢復)。然後,當我排序,我只是確保使用實際的日期時間列,而不是顯示列,以便它正確排序。這對我的需求很好。我認爲最初當我開始使用Angular 2網格時,我期望更多的客戶端功能脫離網格(在排序等方面),但是一旦您正確綁定到後端api源代碼,它並不是真正需要的。

+0

您是否嘗試過使用列模板?它工作正常,如果你做 – mast3rd3mon

+0

不,我沒有模板....我可以做到這一點。如果我只是在獲取數據時轉換爲服務器上的字符串,它也可以工作。我只注意到它應該「在應用綁定時自動分析/接受日期時間作爲傳遞的數據數組中的有效格式。 – BriDev

+0

從我知道,theres沒有日期時間過濾器,我只是使用模板作爲它更容易,需要一個例子? – mast3rd3mon

回答

1

您可以格式化如下日期:

kendo-grid-column field="createdOn" format='{0:MM/dd/yyyy HH:mm:ss} 
0

爲了使電網正確格式的日期,你需要將其轉換成JS日期。我通常在ajax調用的回調函數中從服務器中檢索數據。類似的東西:

api.get('some server url').then(function(data) { 
 
    if (data.SomeDate) data.SomeDate = new Date(data.SomeDate); 
 
});

(這是一個僞代碼,不要直接使用它)

這將讓你的日期格式爲:

field="SomeField" format='{0:d}

field="SomeField" format='{0:MM/dd/yyyy h:mm a} 

希望有所幫助。

+0

你能夠使用屬性格式化日期嗎? 因此,例如:format ='{0:foo.DateFormat}' –

+0

嗯,不知道,我從來沒有嘗試過。 – dpdragnev

+0

詢問的原因是我希望在配置文件中使用列日期格式定義,而不是在列定義中。這樣你只需要修改一次。 –

1

我在模板列中使用日期管道解決了同樣的問題。確保你檢查空值。在component.ts

<kendo-grid-column title="Last Login" width="100"> 
    <ng-template kendoGridCellTemplate let-dataItem> 
     <div *ngIf="dataItem.lastLoginDate!=null">{{ formatDate(dataItem.lastLoginDate) | date:"shortDate" }}</div> 
    </ng-template> 
</kendo-grid-column> 

功能拉出日期字符串的可用部分並將其轉換爲一個JS日期,以便日期管可以使用它。

formatDate(myStringDate) { 
    return new Date(parseInt(myStringDate.substr(6))); 
} 

我用shortDate格式,但你可以找到更多的格式選項這裏包括時間格式: Angular 2 Date Pipe Formatters

0

與EF核心的格式,即一個字符串工作。 YYYY-MM-DDTHH:MM:SS,我能夠在服務中使用它來將拼接日期格式化到調用中(在這種情況下爲read),以準備用於網格消耗的API數據。工作發生的地方是extractData,我從這個主題Angular 2 Date deserialization中獲得併爲我的目的進行了改進。希望它能拯救一個人的悲傷。

我應該添加,這是在作爲擴展BehaviorSubject構造的服務的上下文中。這與Telerik的反應形式編輯模型一起使用:

private fetch(action: string = "", data?: ISomething[], guid?: string): Observable<ISomething[]> { 

    let options = new RequestOptions(); 
    options.body = this.serializeModels(data); 
    return this.http 
     .get('api/controllername/controllerget', options) 
     .map(response => response.json()).catch(this.handleError); 
} 


public read() { 

    this.reset(); 

    if (this.data.length) { 
     return super.next(this.data); 
    } 

    this.fetch() 
     .do(data => this.data = data) 

     .subscribe(data => { 
      this.extractData(data) 
      super.next(data); 
     }); 
} 

private extractData(data?: any) { 
    data.forEach((d) => { 
     d.datefieldname = new Date(d.datefieldname); 
    }); 
    return data; 
}