2014-11-25 59 views
3

我的日期範圍稱爲from和to.I要將其轉換爲幾周。 從日期假設是2014年1月10日和日期是31-10-2014將日期範圍拆分爲相應的星期

然後結果是:

第1周:2014年1月10日至2014年4月10日 第二:05- 102014 to 11-10-2014 3rd:12-10-2014 to 18-10-2014 4th:19-10-2014 to 25-10-2014 5th:26-10-2014 to 31-10-2014

在php.I嘗試幾個代碼,但沒有給出的絕對結果只給01至7,8至14等。 請幫助。

我已經從

Get the date of one week from today with PHP in stack overflow 


date("Y-m-d",strtotime("+1 week")); 

回答

7

該段使用星期日作爲一週的第一天:

$start = new DateTime('2014-10-01'); 
    $end = new DateTime('2014-10-31 23:59'); 
    $interval = new DateInterval('P1D'); 
    $dateRange = new DatePeriod($start, $interval, $end); 

    $weekNumber = 1; 
    $weeks = array(); 
    foreach ($dateRange as $date) { 
     $weeks[$weekNumber][] = $date->format('Y-m-d'); 
     if ($date->format('w') == 6) { 
      $weekNumber++; 
     } 
    } 

每週都會有所有的日子。

如果你只是想每週的第一天和最後一天,那麼你可以使用array_shiftarray_pop來得到它們。例如,對於第一個星期,你可以使用:

$wk1Start = array_shift($weeks[1]); //gives you first day of week 1 
    $wk1End = array_pop($weeks[1]); // give you the last day of week 1 

如果你想爲每個星期的開始和結束日期,這裏是做這件事的方式:

$ranges = array_map(function($week) { 
     return 'start: ' . array_shift($week) 
      . ', end: ' . array_pop($week); }, 
    $weeks); 

這是輸出$ranges對我來說:

Array 
    (
     [1] => start: 2014-10-01, end: 2014-10-04 
     [2] => start: 2014-10-05, end: 2014-10-11 
     [3] => start: 2014-10-12, end: 2014-10-18 
     [4] => start: 2014-10-19, end: 2014-10-25 
     [5] => start: 2014-10-26, end: 2014-10-31 
    ) 
+0

錯誤的答案顯示 – 2014-11-25 05:35:49

+0

情況是怎樣的那失敗了? – ymas 2014-11-25 05:38:18

+0

當我打印$周獲得陣列([1] =>陣列([0] => 2014-10-01 [1] => 2014-10-02 [2] => 2014-10-03 [3] = > 2014-10-04)[2] => Array([0] => 2014-10-05 [1] => 2014-10-06 [2] => 2014-10-07 [3] => 2014 -10-08 [4] => 2014-10-09 [5] => 2014-10-10 [6] => 2014-10-11)[3] => Array([0] => 2014-10 -12 [1] => 2014-10-13 [2] => 2014-10-14 [3] => 2014-10-15 [4] => 2014-10-16 [5] => 2014-10 -17 [6] => 2014-10-18)等 – 2014-11-25 05:42:03

0

嘗試解答嘗試

$start_date = date('Y-m-d', strtotime('2014-10-01')); 
$end_date = date('Y-m-d', strtotime('2014-10-31')); 
$i=1; 
for($date = $start_date; $date <= $end_date; $date = date('Y-m-d', strtotime($date. ' + 7 days'))) { 
    echo getWeekDates($date, $start_date, $end_date, $i); 
    echo "\n"; 
    $i++; 
} 

function getWeekDates($date, $start_date, $end_date, $i) { 
    $week = date('W', strtotime($date)); 
    $year = date('Y', strtotime($date)); 
    $from = date("Y-m-d", strtotime("{$year}-W{$week}+1")); //Returns the date of monday in week 
    if($from < $start_date) $from = $start_date; 
    $to = date("Y-m-d", strtotime("{$year}-W{$week}-7")); //Returns the date of sunday in week 
    if($to > $end_date) $to = $end_date; 
    echo "$i th ".$from." to ".$to.'<br>'; 
} 

輸出: -

1 th 2014-10-01 to 2014-10-05 
2 th 2014-10-06 to 2014-10-12 
3 th 2014-10-13 to 2014-10-19 
4 th 2014-10-20 to 2014-10-26 
5 th 2014-10-27 to 2014-10-31 
+0

有一些日期不存在05,12,19,26。我還希望週日也 – 2014-11-25 05:15:00

+0

也選擇dec 1月31日的錯誤 – 2014-11-25 05:20:48

+0

檢查現在更新的錯誤,你需要在開始和結束日期通過正確的格式 – 2014-11-25 05:22:32