2017-10-05 62 views
1

我在'Ymd H:i:s'中有一個日期時間,我試圖將當前日期與定義的日期+1天相減,以小時,分鐘和秒計算剩餘時間:獲取日期之間的差異返回零

$time = '2017-10-05 14:54:03'; 
$now = date('Y-m-d H:i:s'); 
$endTransaction = date('Y-m-d H:i:s', strtotime($time. ' + 1 day')); 
$dteDiff = $endTransaction - $now; 
echo $dteDiff; 

,但我總是得到0的結果

+3

這不是SQL隊友,你basicly試圖DIFF字符串。 –

+1

請嘗試使用[DateTime](http://php.net/manual/en/class.datetime.php)對象。 – CD001

+0

和日期時間差異功能 – user2867342

回答

1

你做錯了。 date函數返回字符串,因此PHP無法比較任何內容。改爲使用DateTime類。它diff方法返回一些公共屬性DateInterval對象,像days物業等等,它是天的兩個日期之間的正整數(四捨五入):

$now = new \DateTime(); 
$endTransaction = (new \DateTime('2017-12-05 14:54:03'))->modify('+1 day'); 

$diff = $endTransaction->diff($now); 

printf(
    'Difference in days: %d, hours: %d, minutes: %d, seconds: %d', 
    $diff->days, 
    $diff->h, 
    $diff->m, 
    $diff->s 
); 
+0

我想endTransaction來自已定義的變量+ 1天 –

+0

我編輯了我的答案。下次請查看文檔如何操作DateTime對象。官方文件很簡單。 –

1

您可能需要使用此date_diff

$time = '2017-10-05 14:54:03'; 
    $now = date_create(date('Y-m-d H:i:s')); 
    $endTransaction = date_create(date('Y-m-d H:i:s', strtotime($time. ' + 1 day'))); 
    $dteDiff = date_diff($now, $endTransaction); 
    $date = new DateTime($dteDiff); 

    $result = $date->format('Y-m-d H:i:s'); 
+0

我得到這個錯誤類DateInterval的對象無法轉換爲字符串 –

+0

在$現在或$ endtransaction – Kasnady

+0

當我嘗試連接$ dteDiff與字符串 –

0

根據上述描述,請嘗試執行下面的代碼片段作爲它的解決方案。

$time = '2017-10-05 14:54:03'; 
    $now = strtotime(date('Y-m-d H:i:s')); 
    $endTransaction = strtotime(date('Y-m-d H:i:s', strtotime($time. ' + 1 day'))); 
    $dteDiff = ($endTransaction - $now)/(24*60*60); 
    echo round($dteDiff); 
+0

不必要的過度複雜和低效的例子。 –

0

$endTransaction$now是字符串。

$time = '2017-10-05 14:54:03'; 
$now = date('Y-m-d H:i:s'); 
$endTransaction = date('Y-m-d H:i:s', strtotime($time. ' + 1 day')); 
echo($endTransaction."\n"); 
echo($now."\n"); 

It prints: 

2017-10-06 14:54:03 
2017-10-05 11:45:39 

減法不是字符串的有效操作。它只能處理數字。上面的字符串是converted to numbers。轉換隻使用字符串中最左邊的數字,直到它到達不是數字的第一個字符。

上述兩個字符串在轉換爲數字時產生2017,它們的差值當然是0


與PHP的日期的最簡便的方法是使用DateTime及其相關類。

// Convert the input string to a DateTime object 
$then = new DateTime('2017-10-05 14:54:03'); 
// Add 1 day 
$then->add(new DateInterval('P1D')); 
// Get the current date and time 
$now = new DateTime('now'); 
// Compute the difference; it is a DateInterval object 
$diff = $now->diff($then); 

// Display the dates and the difference 
echo('Then: '.$then->format("Y-m-d H:i:s\n")); 
echo('Now : '.$now->format("Y-m-d H:i:s\n")); 
echo('Remaining: '.$diff->format("%R%a days, %h hours, %i minutes, %s seconds.\n")); 

輸出:

Then: 2017-10-06 14:54:03 
Now : 2017-10-05 12:36:25 
Remaining: +1 days, 2 hours, 17 minutes, 38 seconds.