php get microtime from date string

前端 未结 2 827
[愿得一人]
[愿得一人] 2020-12-07 00:29

I am trying to get the time passed between two datetime strings (including milliseconds)

example:

$pageTime = strtotime(\"2012-04-23T16:08:14.9-05:00         


        
2条回答
  •  被撕碎了的回忆
    2020-12-07 01:26

    Try it with DateTime instead.

    This needs a bit of a workaround because DateInterval (which is returned by DateTime::diff()) doesn't calculate the microseconds, so you need to this by hand

    $pageTime = new DateTime("2012-04-23T16:08:14.1 - 5 hours");
    $rowTime  = new DateTime("2012-04-23T16:08:16.9 - 5 hours");
    
    // the difference through one million to get micro seconds
    $uDiff = abs($pageTime->format('u')-$rowTime->format('u')) / (1000 * 1000);
    
    $diff = $pageTime->diff($rowTime);
    
    echo $diff->format('%s')-$uDiff;
    

    I always recommend DateTime because of its flexibility, you should look into it

    EDIT

    For backwards compability to PHP 5.2 it takes the same approach as for the milliseconds:

    $pageTime = new DateTime("2012-04-23T16:08:14.1 - 5 hours");
    $rowTime  = new DateTime("2012-04-23T16:08:16.9 - 5 hours");
    
    // the difference through one million to get micro seconds
    $uDiff = abs($pageTime->format('u')-$rowTime->format('u')) / (1000 * 1000);
    
    
    $pageTimeSeconds = $pageTime->format('s');
    $rowTimeSeconds  = $rowTime->format('s');
    
    if ($pageTimeSeconds + $rowTimeSeconds > 60) {
      $sDiff = ($rowTimeSeconds + $pageTimeSeconds)-60;
    } else {
      $sDiff = $pageTimeSeconds - $rowTimeSeconds;
    }
    
    
    if ($sDiff < 0) {
      echo abs($sDiff) + $uDiff;
    } else {
      // for the edge(?) case if $dt2 was smaller than $dt
      echo abs($sDiff - $uDiff);
    }
    

提交回复
热议问题