【问题标题】:Breeze.js and TimeSpan ISO literalsBreeze.js 和 TimeSpan ISO 文字
【发布时间】:2013-07-21 18:32:56
【问题描述】:

我的 C# 服务器端模型有一个 TimeSpan 属性(用于存储一天中的时间),在 Breeze 检索时,该属性作为时间跨度的 ISO 文字返回。因此,9hrs (09:00) 的 TimeSpan 返回为“PT9H”。将其转换为更用户友好的 09:00 字符串(将受 UI 时间选择器小部件约束)的最佳方法是什么?

我正在使用 Knockout 绑定到我的 HTML 元素。

【问题讨论】:

  • 它尚未合并,但用于 ISO 持续时间解析的 a pull request 最近已添加到 moment.js。所以 moment.js 的 next 版本将能够处理这个问题。
  • 所以我会使用 Knockout 计算来使用 moment.js 进行转换?您能否在答案中发表您的评论,以便我可以信任它?谢谢。
  • 您还可以创建一个自定义绑定处理程序,在此期间将您的格式转换为 9:00。这将是绑定处理程序的完美场景
  • 我宁愿等待看看其他人是否有您今天可以使用的解决方案。在moment.js的下一个版本之后,我总是可以回到这里再次回答。
  • @kadumel - 很好的建议。一些人已经在常规时刻这样做了,例如this guy。暂时会略有不同。duration,但可以使用相同的通用方法。

标签: c# knockout.js breeze timespan momentjs


【解决方案1】:

我发现处理 ISO 8601 持续时间的最佳解决方案是为 moment.js 库使用 moment-isoduration 插件。回购:https://github.com/dordille/moment-isoduration

使用您的示例:

var duration = moment.duration.fromIsoduration('PT9H');

返回一个具有 _milliseconds 属性的持续时间对象,所以调用

moment.utc(duration._milliseconds).format('hh:mm')

应该返回“09:00”

【讨论】:

  • 此功能现已合并到 moment 库中,因此该插件已弃用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多