Pit: Jahreskalender ab dieser Woche

Hallo Forum,

wenn ich ab dieser Woche einen Jahreskalender mit Kalenderwoche und Wochentagen erzeugen will, kann ich das so machen.

Ist das "up to date" oder gibt es bessere/pfiffigere Funktionen hierzu?

Pit

$dayAdd = 0;

if(date('N') === 1) {
  $startTime = strtotime('last monday', strtotime('+1 day'));
} else {
  $startTime = strtotime('last monday');
}

for($week = 1; $week <= 52; ++$week)
{
  echo date('W', strtotime('+'.$dayAdd.' day', $startTime))."<br>";
 
  $output = array();
 
  while($dayAdd < $week * 7)
  {
    $output[] = date('d', strtotime('+'.$dayAdd.' day', $startTime));
   
    ++$dayAdd;
  }
 
  echo implode('--', $output)."<br>";
}

  1. <?php
    
    $day = (new DateTime)->modify('last monday');
    for($i = 1; $i <= 52 * 7; $i++){
        $days[] = $day->format('d');
        $day->modify('+1 days');
    }
    $weeks = array_chunk($days, 7);
    print_r($weeks);
    

    Man kann da auch 'ne Menge Spass mit DateInterval und DatePeriod haben, hab ich auch mal angetestet, aber lesbarer ist das dadurch nicht geworden, da brauchst du dann halt wieder mehr Instanziierungen, mehr Schleifen etc.

    1. Hi chorn,

      dank Dir. Aber ich glaub, ich mag die prozedurale Schreibweise lieber als die objektorientierte.

      Pit

      1. Der Vollständigkeit halber hier noch ein Beispiel mit mehr OOP

        <?php
        
        $period = new DatePeriod(
             (new DateTime())->modify('next monday'),
             new DateInterval('P1D'),
             (new DateTime())->modify('next monday')->modify('+1 years')
        );
        foreach($period as $day){
            $days[] = $day->format('d');
        }
        $weeks = array_chunk($days, 7);
        print_r($weeks);
        
        1. Hallo,

          warum ergibt:

          echo(date('W', strtotime(strtotime("2017W40")."-1 week")));
          

          nicht 39?

          Pit

          1. Hallo,

            warum ergibt:

            echo(date('W', strtotime(strtotime("2017W40")."-1 week")));
            

            nicht 39?

            Ok, so gehts:

            echo date('W',strtotime('2017W40 - 1 week'));
            

            Pit