简体   繁体   中英

How to add "about minutes ago, about hours ago, etc;" in a .filter for angular/ionic v1 project

My question is how to add from now, ago.. etc in a filter of JS in ionic v1 project for wordpress, and not using UTC Date.

I'm using a wordpress native ionic v1 app, so this is very important for getting the exact date of every post fetching in the app.

I don't like to show the date as UTC because it's too long.. i need (1 hour ago, year.. etc) only.! thanks.

here is my code:

.filter('timeAgo', function(){
return function timeAgo(time){
    switch (typeof time) {
        case 'number':
          break;
        case 'string':
          time = +new Date(time);
          break;
        case 'object':
          if (time.constructor === Date) time = time.getTime();
          break;
        default:
          time = +new Date();
      }
      var time_formats = [
        [60, 'seconds', 1], // 60
        [120, '1 minute ago', '1 minute from now'], // 60*2
        [3600, 'minutes', 60], // 60*60, 60
        [7200, '1 hour ago', '1 hour from now'], // 60*60*2
        [86400, 'hours', 3600], // 60*60*24, 60*60
        [172800, 'Yesterday', 'Tomorrow'], // 60*60*24*2
        [604800, 'days', 86400], // 60*60*24*7, 60*60*24
        [1209600, 'Last week', 'Next week'], // 60*60*24*7*4*2
        [2419200, 'weeks', 604800], // 60*60*24*7*4, 60*60*24*7
        [4838400, 'Last month', 'Next month'], // 60*60*24*7*4*2
        [29030400, 'months', 2419200], // 60*60*24*7*4*12, 60*60*24*7*4
        [58060800, 'Last year', 'Next year'], // 60*60*24*7*4*12*2
        [2903040000, 'years', 29030400], // 60*60*24*7*4*12*100, 60*60*24*7*4*12
        [5806080000, 'Last century', 'Next century'], // 60*60*24*7*4*12*100*2
        [58060800000, 'centuries', 2903040000] // 60*60*24*7*4*12*100*20, 60*60*24*7*4*12*100
      ];
      var seconds = (+new Date() - time) / 1000,
        token = 'ago',
        list_choice = 1;
    
      if (seconds == 0) {
        return 'Just now'
      }
      if (seconds < 0) {
        seconds = Math.abs(seconds);
        token = 'from now';
        list_choice = 2;
      }
      var i = 0,
        format;
      while (format = time_formats[i++])
        if (seconds < format[0]) {
          if (typeof format[2] == 'string')
            return format[list_choice];
          else
            return Math.floor(seconds / format[2]) + ' ' + format[1] + ' ' + token;
        }
      return time;
    }
    
    var aDay = 24 * 60 * 60 * 1000;
    console.log(time_ago(new Date(Date.now() - aDay)));
    console.log(time_ago(new Date(Date.now() - aDay * 2)));
    
}

i need to know what's wrong or where is the error in my code?

You can use day.js Reference: https://day.js.org/docs/en/plugin/relative-time and https://day.js.org/docs/en/display/to-now

 dayjs.extend(window.dayjs_plugin_relativeTime) console.log(dayjs().to(dayjs('2000-01-01'))); //for years ago console.log(dayjs().to(dayjs(new Date("2022-07-13T04:15:39.497Z")))); //for months ago console.log(dayjs().to(dayjs(new Date("2022-09-13T04:15:39.497Z")))); //for days ago console.log(dayjs().to(dayjs(new Date("2022-09-15T03:15:39.497Z")))); //for hrs ago console.log(dayjs().to(dayjs(new Date("2022-09-15T04:15:39.497Z")))); //for minutes ago console.log(dayjs().toNow()); //for seconds ago
 <script src="https://cdn.jsdelivr.net/npm/dayjs@1/dayjs.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/dayjs@1/plugin/relativeTime.js"> </script>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM