什麼是最好的方式代表阿賈克斯日期格式,當服務器和用戶有不同的格式,JavaScript和MVC 3。如何同步它的一切?日期格式阿賈克斯
日期格式阿賈克斯
回答
當您將日期信息作爲對AJAX請求的響應發送給客戶端時,請確保將其序列化爲JSON,因爲這是在服務器和客戶端之間交換消息的商定格式,並且在JavaScript中運行良好。不幸的是,JSON並沒有爲格式化日期提供任何規則。
在.NET中可以使用JavaScriptSerializer類對象序列化到JSON。如果你決定使用它,它會爲你處理序列化的DateTime結構。它將在MSDN上詳細描述,請參閱:Stand-Alone JSON Serialization。
當不使用ASP.NET,一個DateTime類型在JSON表示爲 字符串特殊格式...
什麼它歸結爲是這樣的:「\ /日期( 700000 + 0500)\ /」
DateTime值顯示爲的 形式JSON字符串 「/日期(700000 + 0500)/」,其中第一個數字(700000中所提供的示例 )是數GMT時區中的毫秒數,常規爲 (非夏令)自午夜,1970年1月1日,時間的 數量可以是負向表示較早的時間。的一部分 由「0500」中的例子是可選的,表明該 時間是本地種 - 即應轉換爲對反序列化本地 時區。如果不存在,則時間爲 反序列化爲Utc。
注意,正斜槓都逃了出來。只有在這種情況下,字符串才能被解釋爲日期。如果不是,它應該只是被解釋爲一個字符串,但一個比較奇怪的一個...
那麼,我們如何「反序列化」這在JavaScript?如果沒有時區成分,它可以是簡單的:
var date = new Date(parseInt(value.substr(6)));
// parseInt will pick up the integer value
// The Date constructor understands the value as milliseconds from 1/1/1970
或者您可以使用eval
(考慮了一些「邪惡」),並注入一些JavaScript到值:
var date = eval("new " + value.slice(1, -1));
// effectively eval("new Date(1234567)")
有許多關於這個StackOverflow上的問題,以及:
- Deserializing Client-Side AJAX JSON Dates(偉大的答案在這裏!)
- Parsing JSON DateTime from Newtonsoft's JSON Serializer
- Deserializing Client-Side AJAX JSON Dates
最後,來自微軟的伯特蘭樂華一個很好的博客文章,其解釋了.NET的理由:
所以我的建議是堅持與格式。NET將默認使用,並且始終能夠找到正確的方式來處理它,即使您還必須處理時區。不管你做什麼,都不會發明你自己的格式!
PS。從ASP.NET MVC 3中,您也可以將綁定建模爲JSON,因此您也可以將JSON發送到控制器操作。
- 1. 使用阿賈克斯表格插件阿賈克斯提交
- 2. 阿賈克斯
- 3. 阿賈克斯
- 4. 阿賈克斯
- 5. 阿賈克斯
- 6. 阿賈克斯
- 7. 阿賈克斯
- 8. 阿賈克斯
- 9. JSON格式從阿賈克斯
- 10. 格式的數據阿賈克斯
- 11. 在阿賈克斯
- 12. 在阿賈克斯
- 13. 與阿賈克斯
- 14. 阿賈克斯valueChangeListener
- 15. 在阿賈克斯
- 16. 從阿賈克斯
- 17. 阿賈克斯+ qtranslate
- 18. 阿賈克斯CalendarExtender
- 19. 阿賈克斯後
- 20. 阿賈克斯值
- 21. 做阿賈克斯
- 22. 阿賈克斯笨
- 23. 從阿賈克斯
- 24. 從阿賈克斯
- 25. j_security_check阿賈克斯
- 26. 日期選擇在阿賈克斯模式彈出多達
- 27. Codeigniter-阿賈克斯阿賈克斯笨通過Ajax
- 28. 純JS阿賈克斯jQuery的阿賈克斯
- 29. 從正規阿賈克斯jQuery的阿賈克斯
- 30. 阿賈克斯調用不在阿賈克斯工作
我認爲,最好的意見是在服務器端的DateTime使用ISO 8601 – 2011-12-18 09:12:59
一件事內容一定要小心的是,如果你回到datetime.minvalue和你的時區從減去。這可能會導致膿毒。我建議考慮日期輸出的同時考慮。我想象會發生datetime.max +時區。 – Dessus 2011-12-18 21:46:02