当前位置: 首页 > 知识库问答 >
问题:

为时刻添加持续时间(moment.js)

阎晗日
2023-03-14

瞬间版本:2.0.0

在阅读了文档后,我认为这将是直截了当的(Chrome控制台):

var timestring1 = "2013-05-09T00:00:00Z";
var timestring2 = "2013-05-09T02:00:00Z";
var startdate = moment(timestring1);
var expected_enddate = moment(timestring2);
var returned_endate = startdate.add(moment.duration(2, 'hours'));
returned_endate == expected_enddate  // false
returned_endate  // Moment {_i: "2013-05-09T00:00:00Z", _f: "YYYY-MM-DDTHH:mm:ss Z", _l: undefined, _isUTC: false, _a: Array[7]…}

这是一个微不足道的例子,但我甚至不能让它发挥作用。我觉得我错过了什么大东西,但我真的不明白。即使这样,这似乎也不起作用:

startdate.add(2, 'hours')
    // Moment {_i: "2013-05-09T00:00:00Z", _f: "YYYY-MM-DDTHH:mm:ss Z", _l: undefined, _isUTC: false, _a: Array[7]…}

编辑:我的最终目标是制作一个二进制状态图,就像我在这里所做的那样:http://bl.ocks.org/phobson/5872894

正如您所看到的,当我处理这个问题时,我目前正在使用虚拟的x值。

共有1个答案

柴瀚
2023-03-14

我认为您错过了.add()文档中的一个关键点

通过添加时间来改变原始时刻。

您似乎将其视为返回不可变结果的函数。容易犯错。:)

您可以通过克隆瞬间来解决此行为,如下所述。

此外,不能只使用==进行测试。您可以将每个时刻格式化为相同的输出并进行比较,也可以使用.issame()方法。

您的代码现在是:

var timestring1 = "2013-05-09T00:00:00Z";
var timestring2 = "2013-05-09T02:00:00Z";
var startdate = moment(timestring1);
var expected_enddate = moment(timestring2);
var returned_endate = moment(startdate).add(2, 'hours');  // see the cloning?
returned_endate.isSame(expected_enddate)  // true
 类似资料:
  • 有什么方法可以在持续时间对象上使用moment.js方法吗?我在文档中的任何地方都找不到它,它也不是持续时间对象的属性。 我希望能够做到以下几点: 此外,如果有任何其他库可以轻松容纳这种功能,我会对推荐感兴趣。 谢谢

  • 我们有一个应用程序,我们在其中对REST API进行一些内部超文本传输协议调用来获取数据。但是有些请求花费的时间比预期的要长,所以我尝试增加超时持续时间。我尝试了以下操作: RequestConfig RequestConfig=RequestConfig.custom()。setConnectTimeout(30*1000)。build();HttpClient HttpClient=HttpC

  • 我正在寻找一种从“ISO 8601持续时间格式”(P0DT0H0M0S)转换为小时的便捷方法。 到目前为止,我想到了这个: 如您所见,我的方法是将数字拆分并乘以24、1、1/60、1/3600以得到小时。我可以减少代码量吗? 样本数据和所需结果 输入: 'P1DT2H3M44S' (1 天 2 小时 3 分 44 秒) 期望输出: 26.062222222222222 (这是小时)

  • 在我的应用程序中,用户需要能够输入持续时间,包括分钟和秒。 我正在考虑使用Windows中的控件来更改时间,虽然我只需要几分钟和几秒钟,而且箭头也很好,但不是必需的。 JavaFX 2中是否已经有此控件 如果没有,我如何创建这样的控件 上述Windows控件的屏幕截图: 谢谢你的提示!

  • 问题内容: 如何获取格式为2个字符串的持续时间? 我正在尝试使用Calendar类并检查。我与此有关的问题是它不一致。知道我在做什么错吗?每次我运行该程序时,如果没有,输出40-70行到控制台。 问题答案: 那是一个已记录的错误。 尝试在设置日历之前清除日历:

  • 许多记者将显示测试持续时间,以及标记缓慢的测试,如“spec”记者所示: 要调整被认为“慢”的东西,您可以使用以下slow()方法: describe('something slow', function() { this.slow(10000); it('should take long enough for me to go make a sandwich', function() { /