【问题标题】:MomentJS return 0 when formatting time in secondsMomentJS 在以秒为单位格式化时间时返回 0
【发布时间】:2018-08-16 09:37:40
【问题描述】:

还做了一个codepen,所以你可以看到控制台日志:https://codepen.io/anon/pen/LBKbmZ?editors=0012

所以也许我误会了。我有这个,moment({ seconds: 0 }).set('hour', 7).seconds()

我创建了一个moment() 对象。我将seconds 设置为0。https://momentjs.com/docs/#/parsing/object/

然后我通过set('hour', 7) 设置 7 小时。 https://momentjs.com/docs/#/get-set/set/.

然后我执行seconds() 将最终值转换为秒。 https://momentjs.com/docs/#/durations/seconds/.

根据文档,这应该可行吗?我将秒数设置为 0,加上 7 小时,然后将最终时间转换回秒数。但我的回报是 0?

我使用 momentjs 是否错误或误解了时间?

谢谢

【问题讨论】:

  • 我不知道momentjs,但您可以在您发布的链接中阅读,使用asSeconds() 以秒为单位获取持续时间。 seconds() 仅返回每分钟的秒数。 If you want the length of the duration in seconds, use moment.duration().asSeconds() instead.
  • 如果您的意图是增加 7 小时而不是 set(),为什么不这样做 moment().add()
  • @Xixis 我不想担心加/减时间或任何事情。有一个时间选择器。用户选择9AM。我只想将小时设置为 9 并转换为秒。加/减小时或分钟,听起来很乱。我可能是错的:)

标签: javascript momentjs


【解决方案1】:

对于moment 的实例,seconds() 方法为您获取日期和时间的“秒”部分。该值将介于 0 和 59 之间。您所指的 seconds() 方法的文档属于 duration 实例,该实例对此方法有不同的实现。

您似乎正在尝试获取自某个起点以来的秒数。你可以创建一个duration 实例并调用它的seconds() 方法:

moment.duration({hours: 7}).asSeconds();

moment 实例本身也提供了unix() 方法,它可以获取自 UNIX 纪元(UTC 时间 1970 年 1 月 1 日星期四)以来经过的秒数。

【讨论】:

  • 但是我不能在矩函数上使用duration 方法。我想设置初始秒值。 Suedo 代码之类的,所以我的目标是这个moment({ seconds: previousInputInSeconds }).set(hour, userSelected9AM).asSeconds() // convert to seconds so i can set the previousInputInSeconds again
  • 您可以使用diff 计算两个时刻之间的差异。这会给你一个duration
【解决方案2】:

正如您链接的文档中所述,asSeconds() 返回持续时间,而 seconds() 返回时间戳。

所以试试这个吧: console.log(moment.duration({hours: 70}).asSeconds(), '<<<----');

【讨论】:

    【解决方案3】:

    所以建议的两个答案很有帮助,但我做了一些不同的事情,没有使用duration 方法。

    问题:使用时间选择器返回 {hour: 3}{minute: 3} 的对象,具体取决于用户选择的内容。以秒为单位返回该值。这样一来,在内部,我总是在几秒钟内工作,而且更容易。

    现在如果我使用duration的上述方法,我将第一个用户输入转换为秒,我保存它,然后用户在几分钟内进行更改,我可以将它添加到我保存的初始值,什么如果用户做一个较低的时间?我需要做一些逻辑来确定我是否需要做加法或减法。

    我想要的是,一个简单的;我接受小时或分钟的时间。我从一天开始的几秒钟内就得到了那个时间。这就是我所拥有的:

    let t = moment({ hour: 0, minute: 0, seconds: 0 }).add(savedTime, 'seconds');
    
    t.set({ [hourOrMinute]: userinputTime }).diff(moment().startOf('day'), 'seconds')
    

    所以我将初始时间设置为 0。然后我将当前保存的时间(以秒为单位)添加到该时间。然后我根据我以前的时间设置时间。然后我做一个差异,从一天的开始到当前输入的时间并以秒为单位返回。

    希望文字不要太多,对某人有所帮助。

    【讨论】:

    • 文字不多,但这不应该是公认的答案。即使这是您最终在代码中使用的解决方案,它也不能回答/您最初的问题,即为什么 seconds() 没有返回您期望的持续时间。否则每个人都会/可以通过剪断他们适当的生产代码来结束这个问题。
    猜你喜欢
    • 1970-01-01
    • 2011-08-02
    • 1970-01-01
    • 2020-10-16
    • 2021-07-24
    • 1970-01-01
    • 2015-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多