2010-08-15 52 views
1

请参阅此处的示例:http://www.jsfiddle.net/s2uYE/JSON.Stringify如何(或更恰当地说:为什么)更改Date()值?

注意,第二个新Date()比第一个新Date()小1小时,即使它们是在同一时间启动的。

这使我在最近的一个项目中混乱不已,我只想知道为什么会发生这种情况,以及如果这是浏览器在通过JSON进行字符串化时如何处理日期的错误,或者这是否会“发生”我还没有意识到这个好处。

任何帮助表示赞赏!

亲切的问候, 马克

+0

他们在这里是同一时间,请记住您与格林威治标准时间/祖鲁语的抵消,您是否位于距离那里一小时的地方? – 2010-08-15 20:43:52

回答

2

我敢打赌,这是预期的行为。考虑到万维网真的是“全球化”,并且您可能会在表单上输入时间或日期。如果你从Javascript生成这个值,大多数时候你不需要相对于用户浏览器的本地时间。当我去你的小提琴,我是4小时后面的JSON时间。

在服务器端,您希望以最中立的方式区分这次输入。 GMT是一个非常方便的标准。请记住,它可能是世界某个地方的午夜,但它只会在午夜格林尼治标准时间一次。

1
alert(new Date().toUTCString() + '\n' + JSON.stringify({ 'date': new Date() })); 
0

对不起,对于Date()值如何变化以及在哪里,我还有点困惑。

如果我打电话给'新日期()'浏览器软件需要从我的电脑的时间,正确的?

如果我要从JSON.Stringify()方法中调用'new Date()',那么会发生什么?新的Date()获取它的值的位置,我认为它仍然会来自我的机器,它应该与第一个'new Date()'的值相同。

如果情况并非如此,从JSON.Stringify中调用'new Date()'会以某种方式拉出不同的时区,那么肯定可以通过将'new Date()'值存储在变量中并且然后将这个变量放在传递给JSON.Stringify的对象字面量中?

例如(对不起,我只被允许发布1链接,所以不得不把我的jsFiddle代码放在这里)

var storeDate = new Date();
alert(storeDate +'\ n'+ JSON.stringify({'date':storeDate}));

但这不起作用,所以看起来JSON.Stringify以某种方式改变了变量?

对不起,如果我误解了人们的建议。但它听起来像你说这一切都取决于时区 - 这很好 - 但我只是不明白为什么执行'新日期()'和存储在一个变量的值,然后可以让它的设置值更改为一个不同的值当通过JSON.Stringify?

更新:所以它似乎即使我将新的Date()存储在变量中它不是存储在变量中的设置值。 http://www.jsfiddle.net/s2uYE/3/显示如果我手动输入日期时间,那么JSON.Stringify什么也不做。

相关问题