2012-09-13 34 views
1

我在PHP日期工作,我有點難倒與日日比較,發現日的下一個日期在PHP

這是我的代碼:

$day = 'Thursday'; 
$i = 0; 
$o_date = new DateTime("2012-09-12 20:56:43 +18 hours"); 
$date = date_format($o_date, 'l'); 
$full = date_format($o_date, 'd-m-Y'); 
if($day!=$date) { 
    $date = new DateTime($date . " +1 days"); 
    $i++; 
} 
$order_day = new DateTime($full . " +".$i." days");$order_day = date_format($order_day, 'D, d M'); 
return $order_day; 

這是我希望它做的:

1)我有字符串格式日(如星期四)

2)我有一個訂單日期(如2012-09-12 20:56:43

0123。

我想獲得該日期並將一天變成一個字符串(例如date_format($o_date, 'l');,這樣將返回Wednesday,然後我要計算直到訂單日期後的下個星期四的多少天,我已經構建了一個if循環。然後我想獲取原始日期並添加$i積累的天數,然後以日期格式返回日期(例如,Thursday, 13 September,但由於某種原因,我的代碼無法運行。是否有人可以看到我所做的工作錯在這裏

+0

答:您需要通過循環而不是僅僅增加'$ i'一次。 B.您可以在'date_format()'中使用''N''而不是''l''。 – hjpotter92

回答

2

取而代之的是循環的,你爲什麼不使用數字每天計算:

$day = 'Thursday'; 
$day_names = array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); 
$day_num = array_search($day, $day_names); 
$o_date = new DateTime("2012-09-12 20:56:43 +18 hours"); 
$o_day_num = $o_date->format('w'); 
$day_diff = ($day_num - $o_day_num) % 7; 
if ($day_diff == 0) { $day_diff = 7; } 
$order_day = clone $o_date; 
$order_day->add(new DateInterval("P".$day_diff."D")); 
+0

我認爲這可能是更好的方法,如果它符合OP的要求。 – FilmJ

+0

謝謝,但我得到以下'類'DateTimeInterval'找不到'。另外你錯過了最後一行''''。 :) – dpDesignz

+0

固定。它應該是'DateInterval'。 – Barmar

1

所以其實我喜歡@ Barmar的想法更好,但是這是我想出了..在你的原始代碼中有很多問題,包括初始日期的格式化,以及你每次創建一個新對象而不是使用同一個對象的事實

如果您選擇使用一個循環,我不知道,你應該......試試這個:

<?php 
$day = 'Thursday'; 
$i = 0; 

// Order Date 
$o_date = new DateTime("2012-09-12 20:56:43 +18"); 
$date = $o_date->format('l'); 

while($day!==$date) { 
    $date = $o_date->add(new DateInterval('P1D'))->format('l'); 
    $i++; 
} 
$order_day = $o_date->format('D, d M'); 
+0

謝謝,完美的工作,我忘記提及的唯一的事情是,如果它已經是星期四,它將計入下一個星期四等? – dpDesignz

+0

是的,我想你會想要的...說實話,我認爲@Barmar有正確的想法,循環不是真的需要,只是一個小數學... – FilmJ

+0

感謝您的幫助,雖然。我是一個玩PHP的日期部分的新手。 :) – dpDesignz