Last Login in number of days format

Okay, there are a couple of things to do:

  • Get last_active for the user
  • Calculate the days since last_active
  • Set last_active_days_ago for the user

So you can go like this:

function daysAgo( $time ) {
  $time = time() - $time;
  $daysAgo = $time / 86400; // calculate days
    return $daysAgo;
}

function set_user_last_active_days_ago( $user_id ) {
  // get last time active
  $time = get_user_meta( get_current_user_id(), 'last_active', true );

  if ( !empty($time) ) :
    // calculate time since last_active
    $time = daysAgo( strtotime($time) );
    // update user meta
    update_user_meta( $user_id, 'last_active_days_ago', $time );
  endif;
}

set_user_last_active_days_ago( get_current_user_id() );

You’ll also have to set last_active somewhere:

function set_user_last_active( $user_id ) {
  update_user_meta( $user_id, 'last_active', date('Y-m-d H:i:s') );
}

set_user_last_active( get_current_user_id() );

Note: You can also pass in a custom user ID within set_user_last_active and set_user_last_active_days_ago instead of the current user ID.

Update: You can call set_user_last_active and set_user_last_active_days_ago within every action you’d like to. Let’s say you want to set last_active every time a user logged in to WordPress:

add_action('wp_login', 'user_login_last_active', 10, 2);
function user_login_last_active($user_login, $user) {
  set_user_last_active( $user->ID );
}

It’s completely up to you when you want to set the data. It can be set per login (like above) or e.g. every time a post is saved or the profile is updated.

If none of these actions will fit your need you can take a look the available Actions at the Codex.