2014-09-25 39 views
0

我有一個JavaScript對象如下。JSON.stringify(objExtraParam)給出錯誤的日期

var obj = { pageSize:"25",asOfDate:"Thu Sep 25 00:00:00 UTC+0530 2014"};

當我字符串化它,

var d = JSON.stringify(obj);

它給我造成的

{"pageSize":"25","asOfDate":"2014-09-24T18:30:00Z"}

,這可能是它給人日期2014-09-242014-09-25的原因是什麼?

編輯:

我的部署服務器位於美國(美國東部時間UTC -5:00)。當我從我的本地機器在印度的檢查網站的給我日期24 Sept 2014

+0

是asOfDate是一個Date對象?或一個字符串? – 2014-09-25 13:34:16

+0

當然這是一個日期,這可能是由UTC轉換造成的 – felipekm 2014-09-25 13:35:12

+0

'JSON.stringify'會自動將日期轉換爲UTC嗎? – Rohaan 2014-09-25 13:37:14

回答

3

UTC+0530聲明UTC時間偏移量。似乎5:30India or Sri Lanka area附近。

"2014-09-24T18:30:00Z"與兩種不同格式的"Thu Sep 25 00:00:00 UTC+0530 2014"相同。第一種格式的Z解析爲UTC(GMT)時間,在這種情況下爲-5:30。所以18:3024:00 - 5:30

所以,如果你是stringify -ing在一個負偏移的時區(比如在United StatesUTC−08:00),那麼它可能會推遲一天解析日期。

我認爲這是你所看到的。

相關SO問題:JSON Stringify changes time of date because of UTC

+0

但我是'stringify'在時區'5:30'仍然是它的發回日期回來一天 – Rohaan 2014-09-25 14:00:27

+0

''2014-09-24T18:30:00Z「'是一樣的'星期四9月25日00:00 :00 UTC + 0530 2014'。 'Z'表示它是UTC(GMT)時間。 – 2014-09-25 14:03:05

+0

結帳另一個問題,我指:http://stackoverflow.com/questions/1486476/json-stringify-changes-time-of-date-because-of-utc – 2014-09-25 14:07:52

0

有傳遞日期的JSON,所以JSON.stringify只是調用默認date.prototype.toString()方法和正在採取的時區考慮沒有標準格式。

您需要確保將日期轉換爲符合您特定要求的字符串,並且只能轉換爲JSON格式。

1

試試這個

var obj = { pageSize:"25",asOfDate:"Thu Sep 25 00:00:00 UTC+0530 2014"}; 
    obj.asOfDate = reverseUTC(obj.asOfDate); 
    var d = JSON.stringify(obj); 

    function reverseUTC(updatedDate) { 
     if ($.isEmptyObject(updatedDate)) { 
      var offset = updatedDate.getTimezoneOffset(); 

      var currentDateTime = new Date(); 
      updatedDate.setHours((currentDateTime.getHours() * 60 + currentDateTime.getMinutes() - offset)/60); 
      updatedDate.setMinutes((currentDateTime.getHours() * 60 + currentDateTime.getMinutes() - offset) % 60); 
    return updatedDate; 
     } 
    }