Как превратить дату в строку «дни, часы, секунды назад»? - PullRequest
0 голосов
/ 14 сентября 2018

Я пытаюсь взять строку в форме '018-09-06T15: 06: 44.091Z', а затем вычесть из нее Date.now () и затем преобразовать ее в дни, часы, минуты или секунды Строка назад Например, я получаю строку выше, а затем: var date = Date.now() - new Date('018-09-06T15:06:44.091Z'). Это дает мне номер: 697850577. Мне нужно преобразовать это число в строку, которая читает '3 days ago' или '30 seconds ago', основываясь на том, сколько времени прошло с '018-09-06T15:06:44.091Z'. Я не могу использовать moment.js или любые другие библиотеки. Я могу использовать только Angular.JS 1.7 и / или vanilla JS.

Текущая реализация работает, но должен быть лучший способ, чем этот:

function conversions() {
    notif.rollupList.rollups.forEach(function (rollup) {
      rollup.type = getChangeType(rollup.type);
      rollup.modifiedAt = convertDate(rollup.modifiedAt)
    })
  }

  // Converts the date to 'something something ago'
  function convertDate(dateString) {
    var seconds = Math.floor((Date.now() - new Date(dateString)) / 
1000);
    if (seconds >= 60) {
      var minutes = Math.floor(seconds / 60);
      if (minutes >= 60) {
        var hours = Math.floor(minutes / 60);
        if (hours >= 24) {
          var days = Math.floor(hours / 24);
          if (days > 1) {
            return days.toString() + ' days ago'
          } else {
            return days.toString() + ' day ago'
          }
        } else {
          if (hours > 1) {
            return hours.toString() + ' hours ago'
          } else {
            return hours.toString() + ' hour ago'
          }
        }
      } else {
        if (minutes > 1) {
          return minutes.toString() + ' minutes ago'
        } else {
          return minutes.toString() + ' minute ago'
        }
      }
    } else {
      if (second > 1) {
        return seconds.toString() + ' seconds ago'
      } else {
        return seconds.toString() + ' second ago'
      }
    }
  }

Заранее спасибо за любую помощь.

1 Ответ

0 голосов
/ 15 сентября 2018

timeSince=(date)=>{

  let seconds = Math.floor((new Date() - date) / 1000);

  let interval = Math.floor(seconds / 31536000);

  if (interval > 1) {
    return interval + " years";
  }
  interval = Math.floor(seconds / 2592000);
  if (interval > 1) {
    return interval + " months";
  }
  interval = Math.floor(seconds / 86400);
  if (interval > 1) {
    return interval + " days";
  }
  interval = Math.floor(seconds / 3600);
  if (interval > 1) {
    return interval + " hours";
  }
  interval = Math.floor(seconds / 60);
  if (interval > 1) {
    return interval + " minutes";
  }
  return Math.floor(seconds) + " seconds";
}
let aDay = 24*60*60*1000
console.log(timeSince(new Date(Date.now()-aDay)));
console.log(timeSince(new Date(Date.now()-aDay*2)));

Потребовался 1 быстрый поиск в Google и быстрый тест JS fiddle, потому что мне нравится ES6, чтобы найти ответ. Будь то правильный или эффективный, как вы ищете, решать только вам. Оригинальный пост -> Как отформатировать время с ххх например. «4 минуты назад» аналогично сайтам Stack Exchange <- Поиск ответов - это часть того, чтобы быть разработчиком, и это весело. Проведите исследование:) </p>

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