Как отформатировать время с тех пор xxx, например, “4 минуты назад” подобный для Укладки сайтов Exchange

Вы можете вызвать getActivity() или

public void onAttach(Context context) {
    super.onAttach(context);
    this.activity = (CashActivity) context;
    this.money = this.activity.money;
}
182
задан Sky Sanders 4 July 2010 в 20:45
поделиться

5 ответов

Мой удар в этом на основе других ответов.

function timeSince(date) {
    let minute = 60;
    let hour   = minute * 60;
    let day    = hour   * 24;
    let month  = day    * 30;
    let year   = day    * 365;

    let suffix = ' ago';

    let elapsed = Math.floor((Date.now() - date) / 1000);

    if (elapsed < minute) {
        return 'just now';
    }

    // get an array in the form of [number, string]
    let a = elapsed < hour  && [Math.floor(elapsed / minute), 'minute'] ||
            elapsed < day   && [Math.floor(elapsed / hour), 'hour']     ||
            elapsed < month && [Math.floor(elapsed / day), 'day']       ||
            elapsed < year  && [Math.floor(elapsed / month), 'month']   ||
            [Math.floor(elapsed / year), 'year'];

    // pluralise and append suffix
    return a[0] + ' ' + a[1] + (a[0] === 1 ? '' : 's') + suffix;
}
0
ответ дан 23 November 2019 в 06:03
поделиться
function dateToHowManyAgo(stringDate){
    var currDate = new Date();
    var diffMs=currDate.getTime() - new Date(stringDate).getTime();
    var sec=diffMs/1000;
    if(sec<60)
        return parseInt(sec)+' second'+(parseInt(sec)>1?'s':'')+' ago';
    var min=sec/60;
    if(min<60)
        return parseInt(min)+' minute'+(parseInt(min)>1?'s':'')+' ago';
    var h=min/60;
    if(h<24)
        return parseInt(h)+' hour'+(parseInt(h)>1?'s':'')+' ago';
    var d=h/24;
    if(d<30)
        return parseInt(d)+' day'+(parseInt(d)>1?'s':'')+' ago';
    var m=d/30;
    if(m<12)
        return parseInt(m)+' month'+(parseInt(m)>1?'s':'')+' ago';
    var y=m/12;
    return parseInt(y)+' year'+(parseInt(y)>1?'s':'')+' ago';
}
console.log(dateToHowManyAgo('2019-11-07 19:17:06'));
0
ответ дан 23 November 2019 в 06:03
поделиться

Это должно правильно обработать любую допустимую метку времени, включая Date.now (), исключительные единицы и будущие даты. Я не учел месяцы, но это должно быть легко включить. Я пытался сохранить это читаемым как возможное.

function getTimeInterval(date) {
  let seconds = Math.floor((Date.now() - date) / 1000);
  let unit = "second";
  let direction = "ago";
  if (seconds < 0) {
    seconds = -seconds;
    direction = "from now";
  }
  let value = seconds;
  if (seconds >= 31536000) {
    value = Math.floor(seconds / 31536000);
    unit = "year";
  } else if (seconds >= 86400) {
    value = Math.floor(seconds / 86400);
    unit = "day";
  } else if (seconds >= 3600) {
    value = Math.floor(seconds / 3600);
    unit = "hour";
  } else if (seconds >= 60) {
    value = Math.floor(seconds / 60);
    unit = "minute";
  }
  if (value != 1)
    unit = unit + "s";
  return value + " " + unit + " " + direction;
}

console.log(getTimeInterval(Date.now())); // 0 seconds ago
console.log(getTimeInterval(Date.now() + 1000)); // 1 second from now
console.log(getTimeInterval(Date.now() - 1000)); // 1 second ago
console.log(getTimeInterval(Date.now() + 60000)); // 1 minute from now
console.log(getTimeInterval(Date.now() - 120000)); // 2 minutes ago
console.log(getTimeInterval(Date.now() + 120000)); // 2 minutes from now
console.log(getTimeInterval(Date.now() + 3600000)); // 1 hour from now
console.log(getTimeInterval(Date.now() + 360000000000)); // 11 years from now
console.log(getTimeInterval(0)); // 49 years ago
0
ответ дан 23 November 2019 в 06:03
поделиться

 функция timeSince (дата) {var секунды = Math.этаж ((new Date () - date) / 1000); var interval = Math.floor (секунды / 31536000); if (интервал> 1) {интервал возврата + "годы"; } interval = Math.floor (секунды / 2592000); if (interval> 1) {интервал возврата + "месяцы"; } interval = Math.floor (секунды / 86400); if (interval> 1) {интервал возврата + "дни"; } interval = Math.floor (секунд / 3600); if (interval> 1) {интервал возврата + "часы"; } interval = Math.floor (секунд / 60); if (interval> 1) {интервал возврата + "минуты"; } return Math.floor (секунды) + «секунды»; } var aDay = 24 * 60 * 60 * 1000 console.log (timeSince (новая дата (Date.now () - aDay))); console.log (timeSince (новая дата (Date.now () - aDay * 2))); 
290
ответ дан 23 November 2019 в 06:03
поделиться

Я не проверял (хотя это было несложно), но я думаю, что сайты Stack Exchange используют плагин jquery.timeago для создания этих временных строк .


Плагин довольно прост в использовании, он чист и обновляется автоматически.

Вот небольшой пример (с домашней страницы плагина):

Сначала загрузите jQuery и плагин:

Теперь прикрепим его к вашему отметки времени в DOM готовы:

jQuery (документ) .ready (function () {
jQuery ("abbr.timeago").давно(); });

Это превратит все элементы abbr с классом timeago и ISO Отметка времени 8601 в заголовке: 17 июля, 2008 примерно так: около года назад , урожайность: около года назад. Как раз проходит, отметки времени будут автоматически обновлять.

54
ответ дан 23 November 2019 в 06:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: