2016-05-12 105 views
2

這裏是我的代碼:在PHP中生成日期

$d = new DateTime('2016-07-14'); 
$inc = new DateInterval('P1D'); 
$dateOptions = ''; 
//1=monday 2=tuesday 3=wednesday 
$required = array(1,2,3,4); 
$counter = $week = 0; 
for ($i=0; $i<40; ++$i){ 
    $d = $d->add($inc); 
    if (in_array($d->format('w'), $required)) { 
     if($counter % 4 == 0){ 
      echo ($week + 1) . "<br />"; 
      ++$week; 
     } 
     $t = $d->format('l, F d, Y'); 
     echo $t . "<br />"; 
     ++$counter; 
    } 
} 

下面是輸出:

1 
Monday, July 18, 2016 
Tuesday, July 19, 2016 
Wednesday, July 20, 2016 
Thursday, July 21, 2016 
2 
Monday, July 25, 2016 
Tuesday, July 26, 2016 
Wednesday, July 27, 2016 
Thursday, July 28, 2016 

我想看起來像這樣的輸出:

1 
Thursday, July 14, 2016 
2 
Monday, July 18, 2016 
Tuesday, July 19, 2016 
Wednesday, July 20, 2016 
Thursday, July 21, 2016 
3 
Monday, July 25, 2016 
Tuesday, July 26, 2016 
Wednesday, July 27, 2016 
Thursday, July 28, 2016 

什麼修改代碼需要讓星期四在第一週內輸出?

在此先感謝!

+0

從[php-datetime-class-change-first-day-of-week-to-week]獲取幫助(http://stackoverflow.com/questions/13128854/php-datetime-class-change-本週的第一個星期一) –

回答

0

使用下面的代碼,

for ($i=0; $i<40; ++$i){ 
    if($i==0) 
    { 
     echo ($week + 1) . "<br />"; 
      ++$week; 
    $t = $d->format('l, F d, Y'); 
     echo $t . "<br />"; 

    } 
    $d = $d->add($inc); 
    if (in_array($d->format('w'), $required)) { 
     if($counter % 4 == 0){ 
      echo ($week + 1) . "<br />"; 
      ++$week; 
     } 
     $t = $d->format('l, F d, Y'); 
     echo $t . "<br />"; 
     ++$counter; 
    } 
} 

輸出:

1 
Thursday, July 14, 2016 
2 
Monday, July 18, 2016 
Tuesday, July 19, 2016 
Wednesday, July 20, 2016 
Thursday, July 21, 2016 
3 
Monday, July 25, 2016 
Tuesday, July 26, 2016 
Wednesday, July 27, 2016 
Thursday, July 28, 2016 
+0

OP爲什麼要「使用此代碼」?你有什麼改變,爲什麼? – Rizier123

+0

他已經完成了,「$ inc = new DateInterval('P1D');」它會增加一天,所以如果他想獲取當前日期,他也可以通過上面的代碼獲取它,只是在邏輯上改變他的代碼@ Rizier123 –

+0

謝謝你的幫助! –

1
  1. 您增值,這會從0初始化的計數器於是更改爲週數
  2. 你問從給定的日期開始,但在循環內部增加它。因此,在循環之前減去它

所以修改後的代碼:

<?php 
$d = new DateTime('2016-07-14'); 
$inc = new DateInterval('P1D'); 

$d = $d->sub($inc); // You need the start date from 14 

$required = array(1,2,3,4); 
$week = 0; 
for ($i=0; $i<40; ++$i){ 
    $d = $d->add($inc); 
    $weekNumber = $d->format('w'); 
    if (in_array($weekNumber, $required)) { 
     if(!($weekNumber-1) % 4){ //Don't calculate the counter, but the week number 
      echo (++$week) . "<br />"; 
     } 
     $t = $d->format('l, F d, Y'); 
     echo $t . "<br />"; 
    } 
} 

輸出:

Thursday, July 14, 2016 
1 
Monday, July 18, 2016 
Tuesday, July 19, 2016 
Wednesday, July 20, 2016 
Thursday, July 21, 2016 
2 
Monday, July 25, 2016 
Tuesday, July 26, 2016 
Wednesday, July 27, 2016 
Thursday, July 28, 2016 
3 
Monday, August 01, 2016 
Tuesday, August 02, 2016 
Wednesday, August 03, 2016 
Thursday, August 04, 2016 
4 
Monday, August 08, 2016 
Tuesday, August 09, 2016 
Wednesday, August 10, 2016 
Thursday, August 11, 2016 
5 
Monday, August 15, 2016 
Tuesday, August 16, 2016 
Wednesday, August 17, 2016 
Thursday, August 18, 2016 
6 
Monday, August 22, 2016 

+0

非常好!非常感謝你! –

+0

@TimM歡迎。如果它回答了您的查詢,請不要忘記接受 – Thamilan

0

這是我最後使用的代碼:

$d = new DateTime('2016-08-29'); 
$inc = new DateInterval('P1D'); 

$d = $d->sub($inc); 

$required = array(2,4); //1=monday 2=tuesday 3=wednesday 4=thursday 5=friday 
$howmany = count($required); 

$week = 0; 

for ($i=0; $i<120; ++$i){ 

    $d = $d->add($inc); 
    if (in_array($d->format('w'), $required)) { 
     if($counter % $howmany == 0){ 
      echo ($week + 1) . "<br />"; 
      ++$week; 
     } 

    $t = $d->format('l, F d, Y'); 
     echo $t . "<br />"; 
     ++$counter; 
    } 
} 

感謝您的幫助!