2011-06-05 124 views
1

任何人都可以更正腳本中的錯誤來計算兩個日期之間的天數。 的日期已經通過表單被輸入變量的信息是如下:計算兩個給定日期之間的天數

[departon] => Array ([0] => 1 [1] => June [2] => 2011)  
[returnon] => Array ([0] => 31 [1] => June [2] => 2011) 

我寫的代碼來計算這些日期,但它不是計算一天,它只是輸出0

<?php 
$first_date = mktime(12, 0, 0, $_POST['departon'][1], $_POST['departon'][0], $_POST['departon'][2]); 
$second_date = mktime(12, 0, 0, $_POST['returnon'][1], $_POST['returnon'][0], $_POST['returnon'][2]); 
$days = $second_date-$first_date; 
echo floor($days/60/60/24) . " days"; 
?> 

幫助將不勝感激。

+0

注意你的陣列轉換爲日期時間很容易上堆棧溢出,你並不需要投入的東西像「你好」和「謝謝提前」和'幫助將不勝感激'。這不是論壇,我們只是在這裏做問答。 – 2011-06-06 00:10:51

回答

2

這裏有一個簡單的方法:

$depart = strtotime(implode(' ', $_POST['departon'])); 
$return = strtotime(implode(' ', $_POST['returnon'])); 

$diff = floor(($return - $depart)/(60 * 60 * 24)); 

注:有隻有30天在六月。

+0

這就是我即將發佈的解決方案,但是你打敗了我,@netcoder。做得好。 – dossy 2011-06-06 00:32:27

1

mktime documentation指定了一個月份的數字,因此您需要將'June'轉換爲'6'。

+0

嗨蘭斯,你能詳細談談那一點嗎?第四個參數是月份:$ _POST ['departon'] [1],......我的代碼中是否有錯誤?或者我只是錯過了這裏的觀點? – 2011-06-06 00:08:13

+0

@novice,是的,我抓住了我的錯誤,並修改了我的答案。你似乎在給一個月的'六月'值而不是數字6的mktime。 – 2011-06-06 00:09:48

+0

哦,好的,謝謝。將有一個去轉換,任何更多的幫助將是非常受歡迎的。 – 2011-06-06 00:09:56

3

最簡單的方法是使用日期時間。

考慮一下:

var_dump(new DateTime('1 July 2007')); 

$a = new DateTime('1 July 2007'); 
$b = new DateTime('1 June 2001'); 

var_dump($a->diff($b)); 

後續代碼var_dump將讓你看到不同種類的時候,你可以從中提取。

 
object(DateInterval)[3] 
    public 'y' => int 6 
    public 'm' => int 1 
    public 'd' => int 0 
    public 'h' => int 0 
    public 'i' => int 0 
    public 's' => int 0 
    public 'invert' => int 1 
    public 'days' => int 2221 

您可以通過使用

$date = new DateTime(join(" ",$array)); 
$date2 = new DateTime(join(" ",$array2)); 
$diff = $date->diff($date2);