2016-10-02 14 views
0

Я создаю интерфейс twitter, и я хочу отображать такие моменты, как сам Twitter.Как я могу преобразовать время и дату в API Twitter API в действительный формат ISO?

Я выполняю запрос GET и хватаю твит, затем передаю его в moment.js, чтобы его преобразовать.

Вот фрагмент кода из этого:

client.get('direct_messages', {screen_name: 'theclearytheory', count: '3'}, function(error, messages, response){ 
    if(!error){ 
     var privateMessageTime = []; 

     for(var i=0; i < messages.length; i++){ 
      console.log(messages[i].created_at); 
      privateMessageTime.push(moment(messages[i].created_at).fromNow()); 
     } 
    } else { 
     console.log(error) 
    } 

Прямо сейчас, это работает отлично. Если я вернусь Sun Oct 02 11:59:43 +0000 2016, программа правильно превратит это в: 2 months ago.

Проблема заключается в том, что я получаю это предупреждение в консоли:

Deprecation warning: value provided is not in a recognized ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info. Arguments: [0] _isAMomentObject: true, _isUTC: false, _useUTC: false, _l: undefined, _i: Fri Jul 22 10:19:18 +0000 2016, _f: undefined, _strict: undefined, _locale: [object Object]

Я рыскал по документации это ссылки на, но я просто не могу работать, как работать с этим. Если у кого-то есть опыт с этим (или это намного умнее меня), я бы очень признателен за любую помощь, пожалуйста!

ответ

2

Как указан в разборе документы:

Warning: Browser support for parsing strings is inconsistent . Because there is no specification on which formats should be supported, what works in some browsers will not work in other browsers.

For consistent results parsing anything other than ISO 8601 strings, you should use String + Format

Поскольку вы получаете Sun Oct 02 11:59:43 +0000 2016 вы будете иметь:

moment(messages[i].created_at, 'ddd MMM DD HH:mm:ss Z YYYY').fromNow() 

вместо moment(messages[i].created_at).fromNow().

+0

Ahh Я вижу, так это просто говорит «момент», с чем он работает? – bloppit

+0

Да, именно, вы должны указать формат для входной строки, если она не соответствует ISO 8601, как описано в связанных документах. – VincenzoC

+0

Удивительно, спасибо – bloppit

1

Я хотел бы обратиться к разделу в документах строгого режима. http://momentjs.com/guides/#/parsing/strict-mode/ вы можете использовать свой код, а затем добавьте нужный формат в виде строки для второго аргумента и правды в качестве третьего аргумента и цепи .format() смотрите ниже:

client.get('direct_messages', {screen_name: 'theclearytheory', count: '3'}, function(error, messages, response){ 
      if(!error){ 
       var privateMessageTime = []; 

       for(var i=0; i < messages.length; i++){ 
        console.log(messages[i].created_at); 
        privateMessageTime.push(moment(messages[i].created_at, 'MM/DD/YYYY', true).format().fromNow()); 
       } 
      } else { 
       console.log(error) 
      } 
+0

Я получаю этого чувака: 'dateTweeted.push (момент (твиты [i] .created_at, 'MM/DD/YYYY', true) .format(). FromNow()); ^ ТипError: момент (...). Format (...) fromNow не является функцией' – bloppit

+0

любая идея @haasdev? – bloppit

Смежные вопросы