Checking the data latency on an Always On Availability Group in ASYNC mode
It is worth noting that the value for last_commit_time is defined differently based on whether it is being queried from the secondary or primary replica.


  On the secondary database, this time is the same as on the primary
  database.
  
  On the primary replica, each secondary database row displays the time
  that the secondary replica that hosts that secondary database has
  reported back to the primary replica. The difference in time between
  the primary-database row and a given secondary-database row represents
  approximately the recovery point objective (RPO), assuming that the
  redo process is caught up and that the progress has been reported back
  to the primary replica by the secondary replica.


In addition to the above, a secondary replica that has a delay of a few seconds on the commit will yield a positive number, but one that hasn't finished the commit yet will yield a negative number in your query. 

So if you have a latency of 10 seconds but query at the 5 second mark, since there is no commit time yet on the secondary for the primary's last commit, you're going to get the previous commit time which is probably before the primary's latest commit time. This is expected with asynchronous replication.