2014-04-12 20 views
2

如果我使用下面的代碼PHP OOP的DateTime ModifyDate小數位錯誤

$averageWeeks = 2.7; 
$laidDate->modify('+'.$averageWeeks.' week'); 

我得到的日期2014年5月31日返回,而如果我使用下面的代碼

$averageWeeks = 3; 
$laidDate->modify('+'.$averageWeeks.' week'); 

我獲取日期2014年5月3日,這是正確的。有什麼辦法可以在日期修改方法中使用小數位嗎?

回答

3

假設你從4月12日開始,那麼5月3日將是3周,5月31日將是7周。所以我的猜測是,當你通過「2.7」時,它忽略了「2」。該字符串的一部分。

你可以考慮計算天數分別增加,如:

$averageWeeks = 2.7; 
$averageDays = floor($averageWeeks * 7); 
$laidDate->modify('+'.$averageDays.' days'); 

也考慮到2.7周18.9天。通過採取floor,我們增加了18天。除非你打算改變一天中的時間,否則這不會使分數在這裏增加。如果你這樣做了,你將不得不做一些額外的數學運算,因爲modifyadd都不支持小數值。你可以做這樣的事情:

$averageWeeks = 2.7; 
$averageSeconds = floor($averageWeeks * 7 * 24 * 60 * 60); 
$laidDate->modify('+'.$averageSeconds.' seconds'); 

但是,你可能會被愚弄自己,如果你認爲這段時間是準確的,因爲不是每個地方一天都只有24小時了,由於daylight saving time過渡。

+0

我真的在整天或十幾周後,所以我想我可能不得不做一天的這個版本,看看我是否可以修改我的腳本來反映這一點。感謝您的回答:) –

+0

可以確認,使用天而不是星期產生更準確的結果爲我正在嘗試,所以謝謝! –

+1

沒問題。另外,你可能要考慮使用'add'而不是'modify'加號。它會做同樣的事情,但結果代碼更清晰。 –