React MomentJS从开始时间和结束时间获取持续时间

时间:2018-08-22 15:00:36

标签: reactjs datetime momentjs

我一直在尝试找出计算事件持续时间的最佳方法。

我有一个具有以下字段的收藏集:

type Event {
 ..
 startsAt: "HH:mm MM-DD-YYYY"
 endsAt: "HH:mm MM-DD-YYYY"
 ..
}

理想情况下,我想保存

duration: String!
创建事件时

在我的GraphQL突变中。

有人可以建议我怎么做吗?

我的堆栈:

  • 反应
  • 阿波罗
  • GraphQL

我已安装以下软件:
 ..

  • MomentJS
  • 反应片刻

..

非常感谢

2 个答案:

答案 0 :(得分:1)

具有开始(startsAt和结束(endsAt)的日期,您可以轻松地在React组件中某个位置的前端侧计算持续时间。

类似的东西:

// Convert `startsAt` and `endsAt` strings to moment date objects
const start = moment(state.Event.startsAt)
const end = moment(state.Event.endsAt)

// Calculate the duration
// Keep in mind you can get the duration in seconds, days, etc.
const duration = moment.duration(end.diff(start))
const hours = duration.asHours()

答案 1 :(得分:0)

@Jordan Enev-非常感谢您的快速回复!出于某种原因,尝试此操作后将引发错误“ .diff”不是函数,我假设我必须另外导入一些内容。同样,我最终做出了一个重大决定,决定改用Unix时间戳。

使用Unix时间戳,这就是我实现目标的方式:

添加插件cloud-utils并将其导入:

npm install moment-duration-format

同样在上面,我将时刻包裹在新导入的插件提供的HOC .. import momentDurationFormatSetup from "moment-duration-format"; .. momentDurationFormatSetup(moment); const durationSeconds = (endsAt - startsAt) / 1000; const duration = moment.duration(durationSeconds, "seconds").format("mm"); ..

-然后使用React Moment渲染它:

momentDurationFormatString()