【问题标题】:How to deserialize JSON timespan in javascript如何在javascript中反序列化JSON时间跨度
【发布时间】:2015-11-24 12:04:39
【问题描述】:

我创建了一个返回时间跨度的 C# REST WCF 服务。在客户端,我得到 JSON 序列化的返回值,如 PT14H、PT16H 等。如何将此字符串转换为实际时间跨度?

【问题讨论】:

  • 欢迎来到 SO。您应该尝试通过发布代码自己研究或确定答案。 Javascript中的时间跨度是什么?哪有这回事。那么你希望它如何在客户端表示/使用
  • 在 C# WCF 服务中创建的 TimeSpan 对象被序列化为“PT14H”格式的 json 对象并返回给客户端。但是客户端没有办法将此值反序列化为实际的 TimeSpan
  • 是的,我明白你在说什么。关键是 Javascript 中的“实际”时间跨度是什么意思?时间跨度是一个 .NET 结构。实际上,您想要的也许是几秒钟?或者它代表的分钟数 - 所以传回 TimeSpan.TotalSeconds - 这完全取决于您实际计划如何在客户端使用它。
  • 嗨,肖恩,感谢您的快速支持。在我的例子中,我们使用两种类型的绑定。 WsHttpBinding 和 WebHttpBinding。在 WSHttpBinding 中,C# 客户端代码按预期处理时间跨度。所以我们需要为 WSHttp 和 WebHttp 带来一个通用的返回类型。在 webHttpBinding 中,我注意到 JSON 结果 PT14H 代表 14:00:00,PT14H32M45S 代表 14:32:45。这意味着PT代表时间,H代表小时,M代表分钟,S代表秒。
  • 我所说的只是你可能过于复杂了,而实际上它只是在下面几秒钟。但是如果你想解析它,现在你知道它背后的逻辑只是将它转换为你可以处理的东西。那会是什么?因此,您将花时间将其解析为小时、分钟、秒。我的意思是为什么要打扰。这就是为什么 Unix/epoch 时间被大量使用的原因——它只是一个整数。

标签: javascript json timespan


【解决方案1】:

JavaScript 没有TimeSpan 数据类型,但您可以使用moment.js.

Moment.js 支持ISO 8601 时间间隔(就像.NET TimeSpan),它们被称为durations

它包括基本的算术运算:减去日期得到持续时间,加上日期和持续时间得到日期,加上或减去持续时间得到持续时间,就像.NET DateTime and TimeSpan

示例:

var now= moment();
// 7 hour time span
var timeSpan = moment.duration('PT7H');

// addition
alert(now.add(timeSpan).format());
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.11.2/moment.min.js"></script>
(Adapted from rnd's answer, thanks)

【讨论】:

    【解决方案2】:

    在我的例子中,JSON 结果看起来像 PT14H 代表时间 14:00:00,而 PT9H25M25S 代表时间 9:25:25。也就是说PT代表时间部分,H代表小时部分,M代表分钟部分,S代表秒部分。

    【讨论】:

      【解决方案3】:

      据我所知,本机不支持。

      使用moment-isoduration 库。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-10-02
        • 2019-02-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-15
        相关资源
        最近更新 更多