输出时间戳差分

时间:2016-10-10 00:16:41

标签: php mysql

好的简单问题我希望,但我可能会过度思考解决方案。

我有一个时间戳格式为 datetime 的mysql表。这就是它在数据库中的显示方式(2016-10-08 03:56:26)。

我创建了一个函数,假设它显示时间戳和当前时间(UTC)之间的差异,这是不断增加的。请查看我的代码。目前它有点......问题是在中午(CST)创建时间戳。输出结果将说11小时已经瘫痪,这是不正确的。所有帮助表示赞赏。

<?php
// Set timezone
date_default_timezone_set("America/Chicago");

// Time format is UNIX timestamp or
// PHP strtotime compatible strings
function dateDiff($time1, $time2, $precision = 6) {
// If not numeric then convert texts to unix timestamps
if (!is_int($time1)) {
  $time1 = strtotime($time1);
}
if (!is_int($time2)) {
  $time2 = strtotime($time2);
}

// If time1 is bigger than time2
// Then swap time1 and time2
if ($time1 > $time2) {
  $ttime = $time1;
  $time1 = $time2;
  $time2 = $ttime;
}

// Set up intervals and diffs arrays
$intervals = array('year','month','day','hour','minute','second');
$diffs = array();

// Loop thru all intervals
foreach ($intervals as $interval) {
  // Create temp time from time1 and interval
  $ttime = strtotime('+1 ' . $interval, $time1);
  // Set initial values
  $add = 1;
  $looped = 0;
  // Loop until temp time is smaller than time2
  while ($time2 >= $ttime) {
    // Create new temp time from time1 and interval
    $add++;
    $ttime = strtotime("+" . $add . " " . $interval, $time1);
    $looped++;
  }

  $time1 = strtotime("+" . $looped . " " . $interval, $time1);
  $diffs[$interval] = $looped;
}

$count = 0;
$times = array();
// Loop thru all diffs
foreach ($diffs as $interval => $value) {
  // Break if we have needed precission
  if ($count >= $precision) {
    break;
  }
  // Add value and interval 
  // if value is bigger than 0
  if ($value > 0) {
    // Add s if value is not 1
    if ($value != 1) {
      $interval .= "s";
    }
    // Add value and interval to times array
    $times[] = $value . " " . $interval;
    $count++;
  }
}

// Return string with times
return implode(" ", $times);
}

?>

3 个答案:

答案 0 :(得分:0)

在进行比较之前,使用PHP面向对象的日期命令将时间从一个时区转换为另一个时区。

http://php.net/manual/en/datetime.settimezone.php

答案 1 :(得分:0)

PHP中的另一种方法是使用 Carbon 。它有方便的方法和比较方法。它在Laravel中使用,在市场上占有稳定的地位。

检查一下:http://carbon.nesbot.com/docs/#api-difference也许你会发现没有必要重新发明轮子。

答案 2 :(得分:0)

这对我来说是最好的。我将添加帮助我解决这个问题的链接。 LINK HERE

<?php
    $dt        = new DateTime($row['ticketopen']);
    $now       = new DateTime('now');
    $interval  = $dt->diff($now);
?>