2015-03-02 61 views
-1

我已經創建了一個函數來計算兩天之間的天數,然後是兩週之間的星期,在下面的例子中,有35天正好是5周,但是函數返回的結果是4.8571428571429 - 該部門正在查殺餘下的,並在4出來。兩天之間的天數/週數是否正確?

我可以使用ceil函數將它舍入到5,但這是一個所有日期的安全方法嗎?還是有更好的方法來做到這一點?

$date1 = new DateTime('2015-02-23'); 
    $date2 = new DateTime('2015-03-29'); 

    $diff = $date2->diff($date1)->format("%a"); 

    $weeks = $diff/7; 

    return $weeks; 
+0

總結:'round(「4.8571428571429」,0,PHP_ROUND_HALF_UP);' – 2015-03-02 14:47:55

+0

這可能與包容性/排他性範圍的想法有關。你得到的答案實際上是34/7。意思是diff()在一端不包括邊界日期。 – dan08 2015-03-02 14:50:53

+0

嘗試回合[鏈接] http://php.net/round – 2015-03-02 14:50:59

回答

1

一天添加到$ date2的

$date1 = new DateTime('2015-02-23'); 
$date2 = new DateTime('2015-03-29'); 
$date2->add(new DateInterval('P1D')); 

$diff = $date2->diff($date1)->format("%a"); 

$weeks = $diff/7; 

return $weeks; 

不過,你仍然沒有周差異的整數與你原來的日期

+0

這看起來好像有一個報復性DV,所以+1。 – halfer 2015-03-02 14:56:11

3
$date2->add(new DateInterval('P1D')); 

使用此行之後你的$ date2初始化。

爲什麼這個工作? 如果您計算,現在有34天:FROM 23-02 0:00 TILL 29-03 0:00。

如果您還想在最後一天計算(有35天),則需要添加額外的一天。

+0

謝謝,這似乎工作,但仍然困惑,我算錯了,從3月23日至2月29日,我數到5周,這是35天。 – Goodbytes 2015-03-02 15:08:46

+0

你從午夜到午夜計數。如果你從星期一到星期二計數,你將有1天,因爲你只有計算到星期二開始,直到結束。所以最後一天(3月29日星期日)不包括在內,所以你需要增加額外的一天。 – Blaatpraat 2015-03-02 15:11:44

+0

感謝您的解釋 – Goodbytes 2015-03-02 15:54:50