Как (или точнее: почему) JSON.Stringify меняет значение Date ()? - PullRequest
1 голос
/ 16 августа 2010

См. Пример проблемы здесь: http://www.jsfiddle.net/s2uYE/

Обратите внимание, что вторая новая Дата () на 1 час отстает от первой новой даты (), даже если они инициированы одновременно.

Это вызвало у меня конец путаницы в недавнем проекте, и я просто хотел бы знать, почему это происходит, и если это ошибка в том, как браузеры обрабатывают даты при строковом преобразовании через JSON, или это «должно» произойти, и я просто еще не осознал преимущества.

Любая помощь приветствуется!

С уважением, Mark

Ответы [ 3 ]

2 голосов
/ 16 августа 2010

Держу пари, что это ожидаемое поведение.Учтите, что всемирная паутина действительно «всемирная», и что вы можете указать время или дату в форме.Если вы генерируете это значение из Javascript, большую часть времени вам не нужно местное время относительно браузера пользователя.Когда я подхожу к вашей скрипке, я на 4 часа отстаю от времени JSON.

На стороне сервера вы хотели бы различать этот ввод времени самым нейтральным способом.GMT очень удобный стандарт.Помните, что где-то в мире может быть полночь, но однажды будет только полночь по Гринвичу.

1 голос
/ 16 августа 2010
alert(new Date().toUTCString() + '\n' + JSON.stringify({ 'date': new Date() }));
0 голосов
/ 16 августа 2010

Извините, я все еще немного озадачен тем, как меняется значение Date () и где.

Если я вызываю 'new Date ()', программное обеспечение браузера отнимает время у моего компьютера, правильно?

Если я должен был вызвать 'new Date ()' из метода JSON.Stringify (), что произойдет тогда?Откуда new Date () получает это значение, я думал, что оно все равно будет с моей машины, которое должно быть таким же, как первое 'new Date ()'?

Если это не так, ивызов 'new Date ()' из JSON. Stringify каким-то образом вытащил другой часовой пояс, тогда, конечно, его можно обойти, сохранив значение 'new Date ()' в переменной, а затем поместив эту переменную в литерал объекта, который передается вJSON.Stringify?

например (извините, мне разрешено публиковать только 1 ссылку, поэтому мне пришлось разместить здесь мой код jsFiddle)

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

Но это не работает, поэтому кажется, что JSON.Stringify каким-то образом меняет переменную?

Извините, если я неправильно понял, что люди предлагают.Но звучит так, как будто вы говорите, что все зависит от часовых поясов - и это нормально - но я просто не понимаю, почему, выполнив 'new Date ()' и сохранив значение в переменной, можно изменить его установленное значение на другое значениекогда передается через JSON.Stringify?

ОБНОВЛЕНИЕ: так что, похоже, что я сохраняю новый Date () в переменной, это НЕ установленное значение, хранящееся в переменной.http://www.jsfiddle.net/s2uYE/3/ показывает, что если я вручную наберу дату и время, JSON.Stringify ничего не сделает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...