Javascript无法在日期字符串上使用.now()

时间:2018-10-02 14:01:31

标签: javascript angular

所以我想比较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;
          });
    }

3 个答案:

答案 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)