2015-02-02 16 views
0

После рассмотрения комментариев я решил уточнить свой вопрос, чтобы сделать более понятным вопрос о том, в чем проблема и что я пытаюсь сделать.Как преобразовать дату JSON в формат UTC

Я пытаюсь взять форму Углового бутстрапа, которая привязана к модели Orders, и мы хотим, чтобы этот объект был преобразован в x-www-urlencoded. OrderRef=101121&OrderDate=2015-02-02T17:40:00.111Z&Address=140%20Acacia%20Street, так что я могу передать ему метод $http.post(..).

Я нашел пример в Интернете, где я мог бы преобразовать свой объект Order в форму x-www-urlencoded. Это почти работает, но свойства даты в объекте не форматируются как UTC.

У меня есть API RESTful, который ожидает, что все даты будут переданы как даты, отформатированные в формате UTC, и ошибка POST с ошибкой.

Когда я конвертировать мой объект, используя следующий код в качестве примера:

var order = { 
    OrderRef: '101121', 
    OrderDate: new Date('02/02/2015'), 
    Address: '140 Acacia Street' 
} 

var data = jQuery.param(order); 

Я получаю Mon+Mar+02+2015+00%3A00%3A00+GMT%2B0000+(GMT+Standard+Time) для свойства OrderDate, который не то, что я хотел.

Если я пересылаю этот преобразованный объект в свой RESTful API, это ошибки, потому что он не понимает этот формат даты.

Есть ли встроенная функция JavaScript, которая правильно преобразует объект с Date свойствами в формат UTC?

Это пользовательский интерфейс Bootstrap <input> Элемент, который я пытаюсь связать с OrderDate.

Он корректно отображает дату только при использовании new Date('02/02/2015'). Это не сработает, если я сделал это `OrderDate: '02/02/2015 ', поскольку элемент ввода вообще не покажет дату.

<div class="form-group"> 
    <label for="inputOrderRef3" class="col-sm-2 control-label">Order Ref</label> 
    <div class="col-sm-10"> 
     <input type="text" class="form-control" id="inputOrderRef3" placeholder="Order Ref" ng-model="order.OrderRef" maxlength="6" required> 
    </div> 
</div> 

Я использую Twitter Bootstrap v3.3.2 с AngularJS v1.3.9 и JQuery 2.1.3.

+3

Я не вижу здесь никакого JSON и не знаю, что вы подразумеваете под «датами JSON». Если вы хотите контролировать выходной формат даты, используйте различные методы, доступные для объекта Date. Ваш пример также кажется тривиальным: если вы знаете дату (в данном случае '02/02/2015'), почему бы просто не записать ее в' OrderDate' прямо в нужном вам формате? –

+1

У json нет дат. json - это просто текстовое кодирование структуры данных javascript. если вам нужна дата UTC в вашем json, тогда вам нужно будет убедиться, что всякая структура данных, которую вы кодируете, имеет строку в формате UTC. –

+0

Вы неправильно формулируете свой вопрос, но если я понимаю, что вы пытаетесь сделать, вы ищете нечто вроде 'date.toUTCString()' [ссылка здесь] (https: //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toUTCString) –

ответ

0

У меня была одна и та же проблема в какой-то момент, я попробовал momentjs.

Попробуйте http://momentjs.com/docs/

+0

Я обновил свой вопрос, чтобы уточнить вещи немного больше, поскольку я не думаю, что 'momentjs' действительно решит мою проблему, если я не ошибаюсь? – Intrepid

0

решаемые свою собственную проблему, делая это трудный путь и создавая encode функцию, которая будет генерировать строку URL-закодирован вручную.

var order = { 
    OrderRef: '100101', 
    OrderDate: new Date('02/02/2015'), 
    CustomerName: 'ACME Installations Ltd', 
    Value: 525.00, 
    encode: function() { 
     return "OrderRef=" + encodeURIComponent(this.OrderRef) + "&OrderDate=" + encodeURIComponent(this.OrderDate.toUTCString()) + 
      "&CustomerName=" + encodeURIComponent(this.CustomerName) + "&Value=" + encodeURIComponent(this.Value) + 
      "&Invoice=0"; 
    } 
} 
Смежные вопросы