2016-05-12 74 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; 
    } 
} 

感谢您的帮助!