2010-11-02 81 views
24

乾草,我有一個數據庫舉辦活動。有兩個字段'開始'和'結束',它們包含時間戳。當管理員輸入這些日期時,他們只能設置日,月,年。所以我們只處理包含日,月,年,不是幾小時,幾分鐘,幾秒(幾小時,幾分鐘和幾秒設置爲0,0,0)的郵票。在php中的2個unix時間戳之間尋找天數

我有一個事件,開始時間爲1262304000,結束時間爲1262908800.這些轉換爲2010年1月1日和2010年1月8日。我如何獲得這些時間戳之間的所有日子?我希望能夠在2010年1月2日(1262390400),2010年1月3日(1262476800)返回。一直到結束郵票。這些事件可能會跨越到不同的月份,例如5月28日至6月14日。

任何想法如何做到這一點?

+0

可能重複[如何找到指定的兩個日期之間的日期](http:// stackoverflow。com/questions/2736784 /如何找到指定的日期之間的日期) – Gordon 2010-11-02 16:38:08

+5

所有這些解決方案調整86400將失敗時日期跨度夏時制改變 – 2010-11-02 16:42:45

+0

Mark Ba​​ker>這是unix時間戳的問題。使用DateTime類可能更合適,雖然我沒有檢查我們是否可以輕鬆做到這一點。 – 2010-11-02 16:45:24

回答

37

你只需要計算兩個日期之間的秒數,再除以得到天:

$numDays = abs($smallestTimestamp - $biggestTimestamp)/60/60/24; 

然後,你可以使用一個for循環來檢索日期:

$numDays = abs($smallestTimestamp - $biggestTimestamp)/60/60/24; 

for ($i = 1; $i < $numDays; $i++) { 
    echo date('Y m d', strtotime("+{$i} day", $smallestTimestamp)) . '<br />'; 
} 

同樣,如果您不知道哪個時間戳最小,可以使用min()函數(strtotime中的第二個參數)。

+0

有沒有辦法來修改它,以便它們周圍的方式無關緊要? – dotty 2010-11-02 16:36:44

+1

是的,在整個事情上使用abs()函數。 – 2010-11-02 16:37:13

+1

這會給你兩天之間有多少天,但不是日,月或年。 – 2010-11-02 16:41:31

2

我認爲對此的一個快速解決方法是從end_stamp減去秒數的天數,直到你到達start_tag。

//1 day = 86400 seconds 

我會建立一個日後使用的數組。

EDIT(實施例)

$difference = 86400; 
$days = array(); 
while ($start_time < $end_time) 
{ 
    $days[] = date('M j Y', $end_time); 

    $end_time -= $difference; 
} 

這應包括的任何時間幀,即使其超過一堆幾個月。

2

試試這個:

while($date_start <= $date_end) { 
    echo date('M d Y', $date_start) . '<br>'; 
    $date_start = $date_start + 86400; 
} 

希望這有助於!

0

是這樣的嗎?

$day = $start; 
while ($day < $end) { 
     $day += 86400; 
     echo $day.' '.date('Y-m-d', $day).PHP_EOL; 
} 

順便說一句,1262304000是12月31日,而不是月1

+0

將返回日期 - 1.您需要使用'<='運算符。 – 2010-11-02 16:44:16

+0

他之間說,所以我認爲它是完全的。 – netcoder 2010-11-02 17:08:58

+0

啊,的確如此!我誤解了這個問題,我的錯誤。 – 2010-11-02 17:48:47

0

得到兩個日期的差別,並通過86400 ABS把它(($ DATE1 - $ date2的)/ 86400),會產生所需的結果

1
$d1=mktime(22,0,0,1,1,2007); 
$d2=mktime(0,0,0,1,2,2007); 
echo "Hours difference = ".floor(($d2-$d1)/3600) . "<br>"; 
echo "Minutes difference = ".floor(($d2-$d1)/60) . "<br>"; 
echo "Seconds difference = " .($d2-$d1). "<br>"; 


echo "Month difference = ".floor(($d2-$d1)/2628000) . "<br>"; 
echo "Days difference = ".floor(($d2-$d1)/86400) . "<br>"; 
echo "Year difference = ".floor(($d2-$d1)/31536000) . "<br>"; 

http://www.plus2net.com/php_tutorial/date-diff.php

http://www.phpf1.com/tutorial/php-date-difference.html

0
$daysInBetween = range($startTs, $endTs, 86400); 
$secondDay = date('M d Y', $daysInBetween[1]); 
/* 
$thirdDay = date('M d Y', $daysInBetween[2]); 
... 
*/ 

請注意,range()函數是包容性的。

1
**This is a very simple code for find days hours minutes and seconds in php** 

    $dbDate = strtotime("".$yourbdDate.""); // Database date 
    $endDate = time(); // current time 
    $diff = $endDate - $dbDate; /// diffrence 

    $days = floor($diff/86400); /// number of days 
    $hours = floor(($diff-$days*86400)/(60 * 60)); //// number of hours 
    $min = floor(($diff-($days*86400+$hours*3600))/60);///// numbers of minute 


    $second = $diff - ($days*86400+$hours*3600+$min*60); //// secondes 

    if($days > 0) echo $days." Days ago"; 
    elseif($hours > 0) echo $hours." Hours ago"; 
    elseif($min > 0) echo $min." Minute ago"; 
    else echo "Just second ago";