2011-05-30 38 views
1

我有一個包含事件的MySQL表。每個事件都有一個日期時間列,用於指示何時啓動。將mySQL datetime列翻譯爲'x天/小時開始'的腳本

我正在尋找一種方式來產生類似這樣使用PHP的字符串:

「事件X開始2小時

還應幾天,幾周和幾個月的工作:

「事件X開始在5天/周/月」

+0

我真的不明白爲什麼不寫一個簡單的函數來輸出一個字符串在你的格式基礎上的秒數。並且你從'SELECT UNIX_TIMESTAMP(your_column)-UNIX_TIMESTAMP()FROM yourTable'那裏得到那個數字...' - 應該是微不足道的 – ashein 2011-05-30 14:10:03

+1

@ashein,不要那麼居高臨下。對你來說微不足道,對我來說不一定是微不足道的。 – 2011-05-30 14:12:28

+0

對不起,試圖在答案部分展開它。該func的示例數據挖掘是在我的評論上面 – ashein 2011-05-30 15:24:44

回答

0

你應該有一些變量,以秒爲單位,直到你的日期可用。我的示例函數如下。

<?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天。

希望它有用。

+0

謝謝!效果很好 – 2011-05-30 18:47:21

0

要使用此我首先改變日期的格式:

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; 
    } 
?> 
0

我把下面的代碼片段從here

<?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將是當前日期。這有幫助嗎?