Javascript не может использовать .now () в строке даты - PullRequest
0 голосов
/ 02 октября 2018

Итак, я хотел сравнить две даты внутри пост-объекта.Я пытался сравнить объекты даты, но это вернуло NaN.Затем я попытался преобразовать его в миллисекунды с 1970 года, используя .now () в эти даты, но он вернул следующую ошибку:

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 голосов
/ 02 октября 2018

Это должен быть объект, а не строка, если вы это имели в виду, потому что нет «строки даты».Кроме этого попробуйте:

new Date(a.date).getTime()

Поскольку .now является статическим методом, вы всегда используете его как Date.now ()

Это означает, что Date.now () всегда возвращает миллисекунды, прошедшие с эпохи UNIX.Для преобразования во время Unix используйте getTime.

Если вы хотите сравнить их, сравните две даты без преобразования.

Но имейте в виду, что время Unix указывается в секундах, а метод javascript возвращается вмиллисекунды.Если вам нужно точное время Unix, разделите на 1000.

0 голосов
/ 02 октября 2018

Я предлагаю использовать библиотеку moment.js (https://momentjs.com/docs/) для анализа даты из строки. Таким образом, вы можете иметь что-то вроде

let date = moment(a.date)

0 голосов
/ 02 октября 2018

Вы можете сравнить две даты в формате год-месяц-день (гггг-мм-дд), используя обычные компараторы JavaScript, такие как <и> и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...