所以我想比较post对象中的两个日期。我试图比较日期对象,但返回NaN。然后我尝试在这些日期使用.now()将其转换为1970年以来的毫秒数,但它返回以下错误:
It happens: TypeError: a.date.now is not a function
我尝试了typeof a.date
,但返回了string
。我不知道为什么我不能使用.now()方法。有人可以帮我吗?
角度服务内部的整个功能
getPosts(section) {
return this.http.get(url + '/forum/getPosts/' + section )
.map( (posts: any) => {
// posts should be ordened based on latest replies. If there are no replies yet, we compare it to the date
// of the original post
posts.obj.sort((a, b) => {
const aHasReplies = a.replies.length !== 0;
const bHasReplies = b.replies.length !== 0;
if (aHasReplies && bHasReplies ) {
return a.replies.slice(-1, 1)[0].date - b.replies.slice(-1, 1)[0].date;
} else if ( aHasReplies && !bHasReplies) {
return a.replies.slice(-1, 1)[0].date - b.date;
} else if ( !aHasReplies && bHasReplies) {
return a.date - b.replies.slice(-1, 1)[0].date;
} else {
console.log(a.date.now());
return a.date - b.date;
}
});
return posts;
});
}
答案 0 :(得分:2)
如果这就是您的意思,它应该是对象,而不是字符串,因为没有“日期字符串”。 除此之外,尝试:
new Date(a.date).getTime()
由于.now是静态方法,因此您始终将其用作 Date.now()
这意味着,Date.now()始终返回自UNIX时代以来经过的毫秒数。 要转换为unix时间,请使用getTime。
如果要比较它们,则比较两个日期而不进行转换。
但是请记住,unix时间以秒为单位,而javascript方法以毫秒为单位返回。如果需要确切的Unix时间,请除以1000。
答案 1 :(得分:0)
您可以使用常规的JavaScript比较器(例如<和>等)比较年月日格式(yyyy-mm-dd)的两个日期
答案 2 :(得分:-3)
我建议使用moment.js
库(https://momentjs.com/docs/)从字符串中解析日期。
这样您就可以拥有
let date = moment(a.date)