【问题标题】:Failing to increment date with moment.js无法使用 moment.js 增加日期
【发布时间】:2017-08-28 14:04:02
【问题描述】:

好吧,我只是不能用 moment.js 增加日期。我在我的代码中获得了一个 javascript 日期对象,将其包装到 moment 函数中,计算我需要添加到初始日期的小时数,并且在我使用 .add 方法之后没有任何反应。尝试做类似currentTime.add(2, 'hours') 的事情,但效果不佳。我做错了什么?

const currentTime = moment(ioc.get<Main.IArchiveManager>("ArchiveManager").getCurrentDate());
const speed = this.getData().speed;
const distance = this.calcDistanceFromPrevPoint(initialPoint,prevPoint);
const timeToReachPoint = (distance / speed) * 60;
const estimatedTime = currentTime.add(timeToReachPoint, 'hours');
debugger;
return estimatedTime;

这是我的开发工具的截图,所以你知道发生了什么:

【问题讨论】:

  • 是什么让你认为这是错误的? currentTime 的原始值是多少?
  • 你知道add() 修改了对象,它不会返回一个新对象,对吧?
  • 您必须使用format() 来显示时刻对象的值。请参阅here,了解与控制台中的值打印方式相关的问题。
  • VincenzoC,谢谢,现在我看到了正确的值。这很违反直觉。

标签: javascript date momentjs


【解决方案1】:

一切都按预期工作。您正在记录 currentTime 更改后的值。请记住,.add() 更改了对象的值,它不返回副本,而是返回对象本身(为了更好的链接)。看我的例子,你会看到来了 console.log,调用了两次,但在不同的时间显示了你期望的值。

var time = moment(new Date());
console.log(time);
time.add(2,'h');
console.log(time)
&lt;script src="https://momentjs.com/downloads/moment.min.js"&gt;&lt;/script&gt;

【讨论】:

  • 虽然您强调了时刻对象是可变的,但如果我打开控制台然后运行您的 sn-p 我将获得与 OP 相同的输出。请使用 format()toString()toISOString() 来显示时刻对象值,正如我在回答中所建议的那样(以及在 Internal Properties 指南中)。
  • OP 的问题不在于显示,而更多在于他们认为它没有按需要添加。 sn-p 显示了我想强调的行为,添加更多不会增加我的观点的清晰度。
【解决方案2】:

您必须使用format()(或.toString().toISOString())来显示矩对象的值。

注意:

  • moment对象是可变的,所以调用add会改变原来的对象,如果需要可以使用clone()方法
  • 不要使用Internal properties(以_为前缀)

您的代码很好,您只是以错误的方式记录时刻对象:

const currentTime = moment();
console.log(currentTime.format())
const speed = 0.1//this.getData().speed;
const distance = 20.56;// this.calcDistanceFromPrevPoint(initialPoint,prevPoint);
const timeToReachPoint = (distance / speed) * 60;
const estimatedTime = currentTime.add(timeToReachPoint, 'hours');
console.log(estimatedTime.format())
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"&gt;&lt;/script&gt;

【讨论】:

    猜你喜欢
    • 2016-07-21
    • 2015-12-14
    • 2014-02-27
    • 2017-04-04
    • 1970-01-01
    • 2017-01-22
    • 1970-01-01
    • 2019-06-03
    • 1970-01-01
    相关资源
    最近更新 更多