2014-09-25 2 views
0

У меня есть объект javascript, как показано ниже.JSON.stringify (objExtraParam), дающий неправильную дату

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

когда я stringify его,

var d = JSON.stringify(obj);

его давая мне результат как

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

что может быть причиной того, что его предоставление даты 2014-09-24 чем 2014-09-25?

EDIT:

Мой сервер развертывания находится в США (Eastern Time UTC -5: 00) .Когда я проверить сайт из моей локальной машине в Индии ее дает мне дату, 24 Sept 2014

+0

является asOfDate является объектом дата? или строку? –

+0

Наверняка это дата, это может быть вызвано конверсией UTC – felipekm

+0

делает 'JSON.stringify' автоматически преобразует дату в UTC? – Rohaan

ответ

3

UTC+0530 заявляет смещение времени UTC. Кажется, что 5:30 находится вокруг India or Sri Lanka area.

"2014-09-24T18:30:00Z" такое же, как "Thu Sep 25 00:00:00 UTC+0530 2014" в двух разных форматах. Z в первом формате разрешает время UTC (GMT), которое в этом случае равно -5:30. Таким образом, 18:30 - 24:00 - 5:30.

Так что, если вы stringify -ный в часовом поясе, который является отрицательным смещением (скажет в United StatesUTC−08:00), то это может подтолкнуть дату назад на один день при разборе.

Я думаю, что это то, что вы видите.

Связанные SO Вопрос: JSON Stringify changes time of date because of UTC

+0

, но я 'stringify'-ing в часовом поясе' 5: 30' еще его дающая дату в один день – Rohaan

+0

'' 2014-09-24T18: 30: 00Z "' это то же самое, что 'Thu Sep 25 00:00 : 00 UTC + 0530 2014'. «Z» означает, что время UTC (GMT). –

+0

Оформить другой вопрос, о котором я говорю: http://stackoverflow.com/questions/1486476/json-stringify-changes-time-of-date-because-of-utc –

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; 
     } 
    } 
Смежные вопросы