在我的代码中,我有以下内容
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) ,并删除 根据 Jb31,这是一个非常糟糕的结果想法当差异中的天数达到 365 时....utc
构造函数中不必要的 * 1000
,因为就像 Jb31 提到的那样,diff2 已经以毫秒为单位。
关于javascript - diff momentjs 天与毫秒会产生不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57046127/