从数据库转换时间

时间:2011-12-17 21:31:01

标签: php

我在数据库中定义了一个值为mediumint(11)。目前,如果我运行查询,它将返回3600。

此函数应将该值转换为:1小时。但是当我运行该功能时它不会。我没有价值。

function strTime($s) {
  $d = intval($s/86400);
  $s -= $d*86400;

  $h = intval($s/3600);
  $s -= $h*3600;

  $m = intval($s/60);
  $s -= $m*60;

  if ($d) $str = $d . 'd ';
  if ($h) $str .= $h . 'h ';
  if ($m) $str .= $m . 'm ';
  if ($s) $str .= $s . 's';

  return $str;
 }

非常基本,必须是db中的值?

调用此代码的代码(特定于Joomla):

$query = "SELECT streaming_limit FROM #__cc_users WHERE user_id=".$user->id;
$db->setQuery($query);
$steaming_limit = $db->loadResult(); //returns 3600
echo strTime($streaming_limit); //returns nothing

2 个答案:

答案 0 :(得分:1)

更强大的方法是PHP的DateTimeDateInterval类,它们专门用于此类事情。 下面的代码创建两个DateTime对象,添加指定的秒数 到一个对象,然后计算两者之间的间隔。

此时,您可以格式化时差,但是您可以使用DateInterval::format

function strTimeDiff($seconds)
{
  $date1 = new DateTime();
  $date2 = new DateTime();
  $date2->add(new DateInterval('PT'.$seconds.'S'));
  $interval = $date1->diff($date2);

  echo $interval->format('%d days, %h hours, %i minutes, %s seconds');
}

$secs_from_db = 3600;
echo strTimeDiff($secs_from_db);
// 0 days, 1 hours, 0 minutes, 0 seconds

答案 1 :(得分:0)

您可以尝试使用以下内容:

"将秒数转换为分别包含小时,分钟和秒的数组"

来自http://codeaid.net/php/convert-seconds-to-hours-minutes-and-seconds-%28php%29

<?php

/**
 * Convert number of seconds into hours, minutes and seconds
 * and return an array containing those values
 *
 * @param integer $seconds Number of seconds to parse
 * @return array
 */
function secondsToTime($seconds)
{
    // extract hours
    $hours = floor($seconds / (60 * 60));

    // extract minutes
    $divisor_for_minutes = $seconds % (60 * 60);
    $minutes = floor($divisor_for_minutes / 60);

    // extract the remaining seconds
    $divisor_for_seconds = $divisor_for_minutes % 60;
    $seconds = ceil($divisor_for_seconds);

    // return the final array
    $obj = array(
        "h" => (int) $hours,
        "m" => (int) $minutes,
        "s" => (int) $seconds,
    );
    return $obj;
}