Moment js Time Ago 计算错误的日期

Pet*_*ter 0 javascript date timeago momentjs

也许是一个简单的问题,但我不明白。

var date = new Date();
test = date.toISOString();
alert(moment(test, "YYYYMMDD").fromNow());
Run Code Online (Sandbox Code Playgroud)

会返回“16 小时”,但为什么呢?

演示:https : //jsfiddle.net/5jacaxbf/

Vin*_*zoC 5

因为您使用的是moment(String, String), 而不是moment(String)(toISOString()输出显然是 ISO 8601 格式)或moment(Date).

所以moment(test, "YYYYMMDD")将是一天的开始而不是当前时间。

正如默认部分所述:

您可以创建一个仅指定一些单位的时刻对象,其余的将默认为当前的日、月或年,或 0 表示小时、分钟、秒和毫秒。

var date = new Date();
test = date.toISOString();
var m1 = moment(test, "YYYYMMDD")
console.log(m1.format());
console.log(m1.fromNow());
var m2 = moment(test)
console.log(m2.format());
console.log(m2.fromNow());
var m3 = moment(date)
console.log(m3.format());
console.log(m3.fromNow());
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js"></script>
Run Code Online (Sandbox Code Playgroud)