2010-07-26 40 views
0

我在json日期解析中遇到了一個奇怪的問題。我使用以下解析JSON日期:當本地計算機和服務器在不同的時區時,Json返回不同的日期

dateFormat(new Date(parseInt(user.RegDate.substr(6))), "mm/dd/yyyy") 

當我的本地計算機(客戶端)是從服務器時區不同的時區,然後返回不同的日期,當我嘗試檢索註冊日期用戶。

對於前:

在SQL註冊日期:2010-07-22 19:00:00.000

當我在本地機,這是在IST時區調試,從JsonResult返回的日期是:

/Date(1279805400000)/ 
Thu Jul 22 19:00:00 UTC+0530 2010 

同當我從部署在EST時區的服務器訪問數據時,從JsonResult返回的日期爲:

/Date(1279843200000)/ 
Fri Jul 23 05:30:00 UTC+0530 2010 

這工作完美(返回相同的日期 - 星期四7月22日)當我將本地機器更改爲EST時區。我在這裏錯過了什麼?請建議

了服務器代碼[編輯]:

public JsonResult GetregisteredUsersJSON() 
{ 
    var usersList = this.GetregisteredUsers() 
    return Json(usersList, JsonRequestBehavior.AllowGet); 
} 

private List<Users> GetregisteredUsers() 
{ 
    return (from u in _context.mu_Users 
     orderby u.Reg_Date descending 
     select new Users 
     { 
      FirstName = u.First_Name, 
      LastName = u.Last_Name, 
      RegDate = u.Reg_Date 
     }).ToList(); 
} 
+0

相關的問題 - http://stackoverflow.com/questions/2532729/daylight-saving-time-and-timezone-best-practices – Oded 2010-07-26 19:23:39

回答

1

我強烈懷疑這是在你的服務器端的問題,以及誤解格式化的客戶端的價值。

你應該發送UTC值,而它看起來像你發送的本地值。我假設你的數據庫中的值是UTC值 - 否則整個事情就會變得隨意。當你的服務器改變時區時,你發送一個不同的值應該是一個很大的警告燈。當你調用Date構造函數時只需要一毫秒的值,這意味着自UTC 1970年1月1日以來的毫秒數。

假設您的值是1900 UTC,那麼您的請參見您的IST客戶端上的「Fri Jul 23 00:30:00 UTC + 0530 2010」,以及「Thu Jul 22 12:00:00 UTC- 0700 2010「在您的EST客戶端上 - 因爲這兩者代表相同的UTC時間。

你的服務器代碼是什麼樣的?

+0

我已經更新了我的問題與服務器代碼。我沒有轉換任何服務器端的日期,我只是從數據庫中獲取日期值並傳遞給客戶端 – Prasad 2010-07-26 06:18:03

0

今天同樣的事情發生在我身上。我正在使用sql服務器日期字段,並通過MVC將從數據庫檢索到的日期轉換爲json。我無法真正解釋導致差異的原因,但我懷疑它與我的本地環境不同步的sql server 08 R2更新有關。

無論如何,我只能通過在c#代碼中設置日期來修復它。我創建了一個擴展方法的易用性:

public static DateTime DateOnly(this DateTime date) 
    { 
     return new DateTime(date.Year, date.Month, date.Day); 
    } 
相關問題