在我的代码中,我有以下内容
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
答案 0 :(得分:1)
尝试:
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上的有用概述。
我还看到提到的矩持续时间格式库非常有用: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)中使用“ Day of year”(DDDD)代替“ month of Day”(DD),并在其中删除不必要的对于Jb31,当diff中的天数达到365 ...时,这是一个非常糟糕的主意。* 1000
.utc
构造函数,因为就像提到的Jb31一样,diff2已经以毫秒为单位。
答案 1 :(得分:0)
today.diff(someday)
返回第二天之间的差值(以毫秒为单位),而没有给出第二个参数(例如'days'
)。在out2
中,您尝试将其解释为unix时间戳。这是错误的,原因有两个:
moment.utc(diff2)
将指向1970-10-06(从今天开始)。然后,format命令将返回该日期的天,小时和分钟。