2016-07-22 58 views
0

我有一個表單視圖3個日期字段。在服務器端的代碼如下所示:ExtJS的日期字段不保留時區信息提交

DateTime dtUTC = new DateTime(2010,8,8,2,4,6).SetKind(DateTimeKind.Utc); 
DateTime dtLocal = new DateTime(2010,8,8,2,4,6).SetKind(DateTimeKind.Local); 
DateTime dtUnspec = new DateTime(2010,8,8,2,4,6).SetKind(DateTimeKind.Unspecified); 

一個是UTC,一個在本地和,一個是不確定的。我使用JSON.NET來序列化ISO 8601格式的日期。他們得到正確的序列化到客戶端,並期待如下:

"UtcDate": "2010-08-08T02:04:06.0000000Z", 
"LocalDate": "2010-08-08T02:04:06.0000000+05:30", 
"TokyoDate": "2010-08-08T02:04:06.0000000" 

現在我有3個ExtJS的(版本6.0.1.250)日期字段(我已經設置了「displayFormat」到「YYYY‘ - ’MM'-」 DD HH「:」毫米「:」 SS」,以顯示時間爲好),其顯示他們在瀏覽器中的特定時區格式也可以。

UTC日期:2010-08-08 2時04分06秒
本地日期:2010-08-08 7時34分06秒
未指定日期:2010-08-08 02:04 :06

我的模型字段定義這樣

{ 
    name: "UtcDate", 
    type: "date", 
    allowNull: true, 
    dateFormat: "c" 
}, 
{ 
    name: "LocalDate", 
    type: "date", 
    allowNull: true, 
    dateFormat: "c" 
}, 
{ 
    name: "UnspecDate", 
    type: "date", 
    allowNull: true, 
    dateFormat: "c" 
} 

問題是,當我提交日期服務器,我得到的日期都在本地時區格式

"UtcDate":"2010-08-08T07:34:06+05:30", 
"LocalDate":"2010-08-08T02:04:06+05:30", 
"UnspecDate":"2010-08-08T02:04:06+05:30" 

有沒有辦法,我可以讓他們回到與服務器發送到客戶端相同的時區格式?爲什麼date字段在提交時不保留原始記錄時區信息?

回答

1

日期字符串在解析爲javascript Date對象時並不保留原始時區信息,因爲javascript Date對象沒有時區信息,所以轉換爲標準javascript日期不能無損。

另外,基本上,這三個「時區」(DateTimeKind).NET提供是一個笑話 - 有在使用大約100不同的時區,現在,即使你佔的歷史了。你可以看到,他們是當你與你的UTCDate比較你TokyoDate一個笑話 - 他們是相同的,但他們不應該。未指定時區對任何人都沒有幫助,因爲您可以從中推斷出特定的時間點。

如果您需要保留與JavaScript中的日期滿時區信息,你必須要麼使用支持的時區,像MomentJS支持所有時區的日期庫,也是一個服務器端語言對象,或者你將不得不自己完成一些東西。

不幸的是,在目前MomentJS和ExtJS的之間沒有交互,所以這也意味着你將不得不自己建立的東西,比較How could we set globally in Sencha ExtJS version 6.0.2 the timezone that we want to use?How to show Moment JS formatted date in ExtJS field with xtype: 'datefield'Convert string to new Date object in UTC timeZONE

0

來處理它更好的方式,在字符串格式從服務器端用適當的時區轉換返回日期。在模型的convert()函數中,抓住字符串並返回日期值。這將處理您的時區問題。

例子:

convert(v){ 
//Here v is the input string coming from server side. 
var date = new Date(v); 
return date; 
} 

希望這有助於!

相關問題