2016-12-08 151 views
0

我有這個變量'previousDate'並將它分配到前一個日期。Json.Stringify搞砸了我的日期對象

var previousDate; 

當我做一個console.log(previousDate),我在控制檯得到這個值。

Wed Dec 07 2016 10:02:37 GMT-0800 (Pacific Standard Time) 

現在,當我json.stringify這個數據,我得到以下日期和時間。

2016-12-07T18:02:37.223Z 

日期是一樣的,但請注意在這裏的時間。它顯示了GMT,而不是PST。我需要在這裏有PST時間,當我stringify。有什麼建議嗎?

+0

要點到底是什麼你的目標是什麼?要傳輸日期對象,使用UTC時區通常更簡單,也更不容易出錯。 – Timo

+0

我希望PST定時在字符串化後顯示。但它顯示UTC我猜... –

回答

1

JavaScript日期值不包含時區信息。

當您將某些內容記錄到控制檯時,瀏覽器會盡最大努力向您顯示相關和有用的信息。對於日期,這通常意味着您的本地時區中顯示任何UTC值存儲在內,您必須爲「GMT-0800(太平洋標準時間)」。

如果你想顯示在UTC時間,你可以寫:

console.log(date.toUTCString()) 

這是JSON.stringify是引擎蓋下做的;使用UTC傳輸日期有助於簡化這些信息必須跨越各個時區的情況。

但是,這種行爲似乎並不是你想要的。如果你希望字符串是當你把它的本地時區,你可以寫:

console.log(date.toString()) 
1

它看起來像你可以得到你想要的東西,如果你這樣做:

date.toDateString() + ' ' + date.toTimeString()

2

當你創建你的對象,創建一個方法來返回一個日期字符串。
樣品:

var obj = { d1: (new Date()), d1String: function() { return this.d1.toString(); } } 

或保存YourDate.toString()在你的對象的一個​​屬性。

var objDate = { dateString: YourDate.toString() ;} 

或者

var ff = function(YourObject) { var OBJ = {} ; 
for(x in YourObject) 
{ 
    if (typeof(YourObject[x]) !== "function") 
     eval("OBJ." + x + " = '" + YourObject[x] + "'"); 
    else 
     eval("OBJ." + x + " = '" + YourObject[x]() + "'"); 
} 
var strOBJ = JSON.stringify(OBJ); 
return strOBJ; 
} 

我在GitHub上

https://gist.github.com/kiaratto/afb6bb9acd21d0dda37157eb3a92ec2f