用于将mySQL日期时间列转换为';在x天/小时后开始';


Script to translate a mySQL datetime column to 'starts in x days/hours'

我有一个MySQL表,里面有事件。每个事件都有一个日期时间列,指示它何时开始。

我正在寻找一种使用PHP:生成类似字符串的方法

"事件X在2小时后开始"

也应该工作几天、几周和几个月:

'事件X在5天/周/月后开始'

您应该有一些变量,其中包含截止日期的秒数。下面是我的示例函数。

<?php
function timeRemaining($total) {
 if (!$total || $total <= 0) return false;
 // define your ranges here (desc order), the keys will go to output.
 $elements = array(
  "years"   => 60*60*24*30*12,
  "months"  => 60*60*24*30,
  "weeks"   => 60*60*24*7,
  "days"    => 60*60*24,
  "hours"   => 60*60,
  "minutes" => 60,
  "seconds" => 1
 );
 // compute in a cycle to compress the code
 $return = array();
 foreach ($elements as $name => $dur) {
  $return[$name] = floor($total / $dur);
  $total -= $return[$name] * $dur;
 }
 // return data in the array form
 return $return;
}
// how much till new year?
echo "<pre>",
print_r(timeRemaining(mktime(0,0,0,1,1,2012)-time()));
echo "</pre>";
?>

只需将粘贴复制到任何php文件中进行测试,例如,它会返回到新年前剩余年、月等的数组。您可以通过将返回值提供给另一个字符串生成函数来根据需要定制输出,只是不要忘记根据false检查值,这意味着时间已经过去了。

请注意,月份使用了简化的30天范围,这里的年份设置为360天,而不是现实世界中的365.25天。

希望它有用。

为了使用它,我首先将日期的格式更改为:

Select DATE_FORMAT(date_of, '%d/%m/%Y') as example from tbl

php函数:

<?php
    function days_ago($time)
    {
        $today = mktime(0, 0, 0, date('m'), date('d'), date('Y'));
        $time_array = explode("/", $time);
       if(count($time_array) < 2)
       {
        $time = "N/A";
       }
       else
       {
         $time =   mktime(0, 0, 0, date($time_array[1]), date($time_array[0]), date($time_array[2]));
         $daysAgo = $today - $time;
         $time = ($daysAgo/86400);    
       }
       return $time;
    }
?>

我从这里获得了以下片段。

<?php
$dateDiff = $date1 - $date2;
$fullDays = floor($dateDiff/(60*60*24));
$fullHours = floor(($dateDiff-($fullDays*60*60*24))/(60*60));
$fullMinutes = floor(($dateDiff-($fullDays*60*60*24)-($fullHours*60*60))/60);
echo "Differernce is $fullDays days, $fullHours hours and $fullMinutes minutes.";
?>

$date1将是数据库日期,$date2将是当前日期。这有帮助吗?