2016-12-08 113 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