Search code examples
ionic-frameworklaravel-5.7ionic4

How to display date-time like 6h ago format in Ionic4


In my database time store like 2019-02-14 06:13:03 how to display in formate of 6h ago or 2 day ago . I am using laravel api.

3d ago or 18h ago


Solution

  • First step Create pipe somewhere and your code will be

    import { Pipe, PipeTransform } from '@angular/core';
    
    @Pipe({ name: 'timeAgo' })
    export class TimeAgo implements PipeTransform {
      transform(d: any): string {
    
        let currentDate = new Date(new Date().toUTCString());
        let date = new Date(d + "Z");
    
        let year = currentDate.getFullYear() - date.getFullYear();
        let month = currentDate.getMonth() - date.getMonth();
        let day = currentDate.getDate() - date.getDate();
        let hour = currentDate.getHours() - date.getHours();
        let minute = currentDate.getMinutes() - date.getMinutes();
        let second = currentDate.getSeconds() - date.getSeconds();
    
        let createdSecond = (year * 31556926) + (month * 2629746) + (day * 86400) + (hour * 3600) + (minute * 60) + second;
    
        if (createdSecond >= 31556926) {
          let yearAgo = Math.floor(createdSecond / 31556926);
          return yearAgo > 1 ? yearAgo + " years ago" : yearAgo + " year ago";
        } else if (createdSecond >= 2629746) {
          let monthAgo = Math.floor(createdSecond / 2629746);
          return monthAgo > 1 ? monthAgo + " months ago" : monthAgo + " month ago";
        } else if (createdSecond >= 86400) {
          let dayAgo = Math.floor(createdSecond / 86400);
          return dayAgo > 1 ? dayAgo + " days ago" : dayAgo + " day ago";
        } else if (createdSecond >= 3600) {
          let hourAgo = Math.floor(createdSecond / 3600);
          return hourAgo > 1 ? hourAgo + " hours ago" : hourAgo + " hour ago";
        } else if (createdSecond >= 60) {
          let minuteAgo = Math.floor(createdSecond / 60);
          return minuteAgo > 1 ? minuteAgo + " minutes ago" : minuteAgo + " minute ago";
        } else if (createdSecond < 60) {
          return createdSecond > 1 ? createdSecond + " seconds ago" : createdSecond + " second ago";
        } else if (createdSecond < 0) {
          return "0 second ago";
        }
      }
    }

    And after that incluse timeAgo pipe in app.component.ts something like :

    declarations: [
          AppComponent,
          TimeAgo,
          ...,
        ],
    

    After that your html code will be something like

    <p>{{timeValue | timeAgo}}</p>
    

    Here i created Stackblitz project for you.