在审核了评论之后,我决定澄清我的问题,以便更清楚地了解问题究竟是什么以及我想要做什么。
我正在尝试使用Angular Bootstrap表单,该表单是绑定到作用域上Orders
模型的数据,并希望将此对象转换为x-www-urlencoded
格式,例如OrderRef=101121&OrderDate=2015-02-02T17:40:00.111Z&Address=140%20Acacia%20Street
以便我可以通过$http.post(..)
方法传递它。
我在互联网上找到了一个示例,我可以将Order
对象转换为x-www-urlencoded
形式。这几乎可以工作,但是对象中的日期属性没有被格式化为UTC。
我有一个RESTful API,希望所有日期都以UTC格式的日期传递,而POST
会因错误而失败。
当我使用以下代码转换我的对象时作为示例:
var order = {
OrderRef: '101121',
OrderDate: new Date('02/02/2015'),
Address: '140 Acacia Street'
}
var data = jQuery.param(order);
我为OrderDate属性获取Mon+Mar+02+2015+00%3A00%3A00+GMT%2B0000+(GMT+Standard+Time)
,这不是我想要的。
如果我将此转换后的对象发送到我的RESTful API,则会出错,因为它不了解特定的日期格式。
是否有内置的JavaScript函数可以将具有Date
属性的对象正确转换为UTC格式?
这是我尝试绑定到<input>
属性的Bootstrap UI 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。
答案 0 :(得分:0)
我曾经尝试过一段时间也遇到了同样的问题。
答案 1 :(得分: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";
}
}
答案 2 :(得分:0)
创建一个新类
public class UTCDateTimeConverter : IsoDateTimeConverter
{
public UTCDateTimeConverter()
{
base.DateTimeFormat = "yyyy-MM-dd";
}
}
现在转换如下
[JsonProperty("label")]
[JsonConverter(typeof(UTCDateTimeConverter))]
public DateTime label { get; set; }