javascript - diff momentjs 天与毫秒会产生不同的结果

标签 javascript momentjs

在我的代码中,我有以下内容

const today = moment();
const someday = moment('Wed Oct 10 2018 13:50:00 GMT-0400 (Eastern Daylight Time)');

const diff = today.diff(someday, "days");
const diff2 = today.diff(someday);
out.innerText = diff;
out2.innerText = moment.utc(diff2 * 1000).format("D[ day(s)] H[ hour(s)] m[ minute(s)]");

我期望 diff 和 diff2 有相同的日期,但 diff 返回正确的日期,而 diff2 返回错误的数据。这里的格式有何不同?

JSFiddle:link

最佳答案

尝试:

out2.innerText = moment.duration(diff2).asDays();

这将为您提供十进制天数(没有 utc 转换) - 这与您在 today.diff(someday, "days") 中看到的内容相匹配。

您可以按照所需的 X 天 Y 小时 Z 分钟方式自行格式化,如下所示:

const theDuration = moment.duration(diff2);
out2.innerText = Math.floor(theDuration.asDays()) + " day(s) " + 
  theDuration.hours() + " hour(s) " + theDuration.minutes() + " minute(s)";

只需确保您的输入日期格式/您正在计算的计算机上的时钟/所需的用户输出之间的时区全部匹配。这是文档页面上的有用概述:local / utc .

我还看到提到的 moment-duration-format 库很有用: https://github.com/jsmreese/moment-duration-format

尝试:

out2.innerText = moment.utc(diff2).format("DDDD [ day(s)] H[ hour(s)] m[ minute(s)]");

在格式字符串 (moment.js .format docs) 中使用“一年中的某一天”(DDDD),而不是“一月中的某一天”(DD) ,并删除 .utc 构造函数中不必要的 * 1000,因为就像 Jb31 提到的那样,diff2 已经以毫秒为单位。 根据 Jb31,这是一个非常糟糕的结果想法当差异中的天数达到 365 时...

关于javascript - diff momentjs 天与毫秒会产生不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57046127/

相关文章:

javascript - 我怎样才能停止在 IE 中使用 moment.js 获取无效日期?

javascript - 在同步方法中等待异步方法?

javascript - 有没有更简单的方法来检查属性的存在?

javascript - moment.js 将日期转换为不同的格式

c# - 时刻.js : Convert UTC date from database into local time

javascript - Moment JS持续时间显示错误的时间?

javascript - 本地化 UTC 时间/日期

javascript - 带有注释的 JavaScript 代码的 HTML

javascript - Backbone.js 仅在服务器成功(200 状态)时添加到集合中

javascript - li.toUpperCase() :not selector difficulties