Код JavaScript для отображения Twitter created_at as xxxx назад

Мне нужен код JS, который примет значение created_at из фида Twitter и покажет его как xxxx назад.

Я могу найти примеры создания бита xxxx ago, но не примеры получения бита created_at в правильный формат для JS.

У кого-нибудь есть одна функция, чтобы сделать то, что я после?

Пример формата Tue Apr 07 22:52:51 +0000 2009

Невозможно использовать new Date(Date.parse("Tue Apr 07 22:52:51 +0000 2009")), поскольку он дает неверную ошибку даты в IE.

Ответ 1

Из комментариев, а также код из виджета twitter вот код, который я придумал:

function parseTwitterDate(tdate) {
    var system_date = new Date(Date.parse(tdate));
    var user_date = new Date();
    if (K.ie) {
        system_date = Date.parse(tdate.replace(/( \+)/, ' UTC$1'))
    }
    var diff = Math.floor((user_date - system_date) / 1000);
    if (diff <= 1) {return "just now";}
    if (diff < 20) {return diff + " seconds ago";}
    if (diff < 40) {return "half a minute ago";}
    if (diff < 60) {return "less than a minute ago";}
    if (diff <= 90) {return "one minute ago";}
    if (diff <= 3540) {return Math.round(diff / 60) + " minutes ago";}
    if (diff <= 5400) {return "1 hour ago";}
    if (diff <= 86400) {return Math.round(diff / 3600) + " hours ago";}
    if (diff <= 129600) {return "1 day ago";}
    if (diff < 604800) {return Math.round(diff / 86400) + " days ago";}
    if (diff <= 777600) {return "1 week ago";}
    return "on " + system_date;
}

// from http://widgets.twimg.com/j/1/widget.js
var K = function () {
    var a = navigator.userAgent;
    return {
        ie: a.match(/MSIE\s([^;]*)/)
    }
}();

Ответ 2

Используя moment.js без какого-либо плагина, это настраиваемый формат, который вам нужно использовать для правильного анализа неудобной даты в Twitter:

var tweetDate = 'Mon Dec 02 23:45:49 +0000 2013';
moment(tweetDate, 'dd MMM DD HH:mm:ss ZZ YYYY', 'en');

Ответ 3

Здесь перевод на французский язык решения Brady:

function parseTwitterDate(tdate) {
    var system_date = new Date(Date.parse(tdate));
    var user_date = new Date();
    if (K.ie) {
        system_date = Date.parse(tdate.replace(/( \+)/, ' UTC$1'))
    }
    var diff = Math.floor((user_date - system_date) / 1000);
    if (diff <= 1) {return "à l'instant";}
    if (diff < 20) {return "il y a " + diff + " secondes";}
    if (diff < 40) {return "il y a une minute";}
    if (diff < 60) {return "il y a moins d'une minute";}
    if (diff <= 90) {return "il y a une minute";}
    if (diff <= 3540) {return "il y a " + Math.round(diff / 60) + " minutes";}
    if (diff <= 5400) {return "il y a 1 heure";}
    if (diff <= 86400) {return "il y a " + Math.round(diff / 3600) + " heures";}
    if (diff <= 129600) {return "il y a 1 jour";}
    if (diff < 604800) {return "il y a " + Math.round(diff / 86400) + " jours";}
    if (diff <= 777600) {return "il y a 1 semaine";}
    return system_date;
}

// from http://widgets.twimg.com/j/1/widget.js
var K = function () {
    var a = navigator.userAgent;
    return {
        ie: a.match(/MSIE\s([^;]*)/)
    }
}();

Ответ 5

import * as luxon from 'luxon';

// https://stackoverflow.com/a/20478182/5932012
const TWITTER_DATE_FORMAT = 'EEE MMM d HH:mm:ss ZZZ yyyy';

export const parseTwitterDate = (dateStr: string): luxon.DateTime =>
    luxon.DateTime.fromString(dateStr, TWITTER_DATE_FORMAT);

export const formatTwitterDate = (dateTime: luxon.DateTime): string =>
    dateTime.toFormat(TWITTER_DATE_FORMAT);

Ответ 6

Я использую jquery timeago:

var timeago = document.createElement('time')
var dt = new Date(Date.parse(data['status']['created_at']));
var datetimestr = '' + dt.getFullYear() + '-' + ("0" + (dt.getMonth() + 1)).slice(-2) + '-' + dt.getDate() + 'T' + dt.getHours() + ':' + dt.getMinutes() + ':' + dt.getSeconds() + 'Z'
$(timeago).addClass('timeago').attr('datetime', datetimestr).text(data['status']['created_at']);
if(jQuery().timeago) {$(timeago).timeago();}

Подробнее о времени: http://timeago.yarp.com

Ответ 7

Я сам сталкивался с этой проблемой, и я думаю, что это время для взрослой библиотеки. Я использую time.js для форматирования времени, поэтому я написал расширение для правильного отображения синтаксического разбора для Twitter:

https://github.com/hijonathan/moment.twitter

Он также имеет другой способ возврата супер сокращенных временных меток (например, 7h), как в приложении для iPhone Twitter.

Ответ 8

Может быть, hella поздно, но я только что обнаружил, что разделение строки пробелами и создание переменных соответственно, легко позволяет вам разбивать дату.

// Ex. Thu Sep 28 03:40:33 +0000 2017

var tweetDate = data.tweet[i].created_at;

tweetDate = tweetDate.split(' ');

var tweetMo = tweetDate[1];