【问题标题】:How to convert JSON date to UTC format如何将 JSON 日期转换为 UTC 格式
【发布时间】:2015-02-02 15:47:26
【问题描述】:

在查看了 cmets 之后,我决定澄清我的问题,以便更清楚地了解问题到底是什么以及我正在尝试做什么。

我正在尝试采用 Angular Bootstrap 表单,该表单是绑定到范围内 Orders 模型的数据,并希望将此对象转换为 x-www-urlencoded 格式,例如OrderRef=101121&OrderDate=2015-02-02T17:40:00.111Z&Address=140%20Acacia%20Street 以便我可以将 $http.post(..) 方法传递给它。

我在 Internet 上找到了一个示例,可以将我的 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);

我收到了 Mon+Mar+02+2015+00%3A00%3A00+GMT%2B0000+(GMT+Standard+Time) 的 OrderDate 属性,这不是我想要的。

如果我将此转换后的对象发送到我的 RESTful API,它会出错,因为它不理解特定的日期格式。

是否有内置的 JavaScript 函数可以将具有Date 属性的对象正确转换为 UTC 格式?

这是我尝试绑定到 OrderDate 属性的 Bootstrap UI <input> 元素。

只有在属性上使用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 一起使用。

【问题讨论】:

  • 我在这里没有看到任何 JSON,也不知道您所说的“JSON 日期”是什么意思。如果要控制日期的输出格式,请使用 Date 对象可用的各种方法。您的示例似乎也很简单,因为如果您知道日期(在本例中为 02/02/2015),为什么不直接以您想要的格式将其写入 OrderDate
  • json 没有日期。 json 只是 javascript 数据结构的文本编码。如果你想在你的 json 中使用 UTC 日期,那么你必须确保你编码的任何数据结构都有一个 UTC 格式的字符串开头。
  • 你的问题措辞有误,但如果我理解你想要做什么,你正在寻找类似date.toUTCString()reference here
  • @HowardRenollet:我已经尝试过了,但由于我使用的是 Bootstrap UI,因此输入字段不会接受任何日期,除非日期是使用 Date(...) 对象创建的。

标签: jquery json angularjs twitter-bootstrap-3


【解决方案1】:

我在尝试 momentjs 时遇到过同样的问题。

试试这个http://momentjs.com/docs/

【讨论】:

  • 我已经更新了我的问题以进一步澄清一些事情,因为我认为momentjs 不会真正解决我的问题,除非我弄错了?
【解决方案2】:

通过艰难的方式解决了我自己的问题并创建了一个 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";
    }
}

【讨论】:

    【解决方案3】:

    创建一个新类

     public class UTCDateTimeConverter : IsoDateTimeConverter
    {
        public UTCDateTimeConverter()
        {
            base.DateTimeFormat = "yyyy-MM-dd";
        }
    }
    

    现在转换如下

        [JsonProperty("label")]
        [JsonConverter(typeof(UTCDateTimeConverter))]
        public DateTime label { get; set; } 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多