1. und letzten Tag eines Monats mit timestamp ausgeben.

ciberjoerg

Erfahrenes Mitglied
Ich versuche gerade einen Eventkalender zu schreiben, doch da komm ich schon an das größte problem, wie bekomme ich die Timestamp eines monats herraus?
PHP:
<?php
  $monate = array(1=>"Jan",
                  2=>"Feb",
                  3=>"M&auml;rz",
                  4=>"Apr",
                  5=>"Mai",
                  6=>"Jun",
                  7=>"Jul",
                  8=>"Aug",
                  9=>"Sep",
                  10=>"Okt",
                  11=>"Nov",
                  12=>"Dez");
  $monat = date("n");
  echo "<a href='?month=0'>".$monate[$monat]."</a> | <a href='?month=1'>".$monate[$monat+1]."</a> | <a href='?month=2'>".$monate[$monat+2]."</a> | <a href='?month=3'>".$monate[$monat+3]."</a> | <a href='?month=4'>".$monate[$monat+4]."</a>";
  ?>
So lese ich die aktuellen Monate aus. aber die timestamp benötige ich für die Datenbankabfrage.
bei month 0 soll die aktuelle timestamp des Heutigen Tags 0 uhr bis ende des aktuellen Monats ausgelesen werden.

Wie ich die sql abfrage schreibe ist mir bekannt.
Ich benötige nur noch die Timestamp vom 1. Tag des Monats date("n")+1 bis +4 0 Uhr und Letzten Tag date("n") bis +4 23:59:59:99 Uhr.
 
Hallo!

Ich hoffe ich habe Dich richtig verstanden.....
PHP:
<?php
date_default_timezone_set("Europe/Berlin");

$monat = date("n")+1;

$timestamp_1 = strtotime("2010-".$monat."-1");
$timestamp_2 = strtotime("2010-".$monat."-1 +1 month -1 second");

$timestamp_3 = strtotime("2010-".$monat."-1 +1 month");
$timestamp_4 = strtotime("2010-".$monat."-1 +2 months -1 second");

$timestamp_5 = strtotime("2010-".$monat."-1 +2 months");
$timestamp_6 = strtotime("2010-".$monat."-1 +3 months -1 second");

$timestamp_7 = strtotime("2010-".$monat."-1 +3 months");
$timestamp_8 = strtotime("2010-".$monat."-1 +4 months -1 second");

echo date("d.m.Y - H:i:s", $timestamp_1)."<br>";
echo date("d.m.Y - H:i:s", $timestamp_2)."<br>";

echo date("d.m.Y - H:i:s", $timestamp_3)."<br>";
echo date("d.m.Y - H:i:s", $timestamp_4)."<br>";

echo date("d.m.Y - H:i:s", $timestamp_5)."<br>";
echo date("d.m.Y - H:i:s", $timestamp_6)."<br>";

echo date("d.m.Y - H:i:s", $timestamp_7)."<br>";
echo date("d.m.Y - H:i:s", $timestamp_8)."<br>";
?>
Du musst aber noch prüfen was bei einem Jahreswechsel passiert (dazu hatte ich keine Lust :p).

Gruss Dr Dau
 
Zuletzt bearbeitet:
So für alle die sich auch mal einen Eventkallender basteln wollen und vor dem gleichen Problem sind:

PHP:
<?php
        if($_GET['month']== true){
        $month=$_GET['month'];
        }
        else{
        $month=date("n");
        }
  $monate = array(1=>"Jan",
                  2=>"Feb",
                  3=>"M&auml;rz",
                  4=>"Apr",
                  5=>"Mai",
                  6=>"Jun",
                  7=>"Jul",
                  8=>"Aug",
                  9=>"Sep",
                  10=>"Okt",
                  11=>"Nov",
                  12=>"Dez",
                  13=>"Jan", //ab hier wird für die monatsanzeige im link das neue jahr aufgelistet. ginge sicher eleganter
                  14=>"Feb",
                  15=>"M&auml;rz",
                  16=>"Apr");
  
  
  $monat = date("n")+$month;
  $smonat = date("n");
  $navi= date("n"); // 1. monat der angezeigt wird
  
  if($_GET['yr'] == "1"){
  $year = date("Y")+1;
  }
  else{
      $year = date("Y");
  }
//Folgende funktionen müssen pro monat wiederholt werden hier im beispiel insg. 5 monate
// 2. monat der angezeigt wird
  if(date("n")+1 <= "12"){  //überprüfung für arrays der tagesanzeige. ist date("n")+1 kleiner als 12 oder bereits 13?
  $navi1= date("n")+1;
  $yr1="0";
  }
  else{
      $navi1= date("n")+1-12;    //wenn das ergebniss 13 ist rechne 12 ab und füge dem jahr 1 zu um einen jahreswechsel zu gewärleisten.
      $yr1="1";
      }
// 3. monat der angezeigt wird
  if(date("n")+2 <= "12"){      
  $navi2= date("n")+2;
  $yr2="0";
  }
  else{
      $navi2= date("n")+2-12;
      $yr2="1";
  }
// 4. monat der angezeigt wird
  if(date("n")+3 <= "12"){
  $navi3= date("n")+3;
  $yr3="0";
  }
  else{
      $navi3= date("n")+3-12;
      $yr3="1";
  }
// 5. monat der angezeigt wird
  if(date("n")+4 <= "12"){
  $navi4= date("n")+4;
  $yr4="0";
  }
  else{
      $navi4= date("n")+4-12;
      $yr4="1";
  }

  
  echo "<a href='?month=$navi'>".$monate[$smonat]."</a> | <a href='?month=$navi1&yr=$yr1'>".$monate[$smonat+1]."</a> | <a href='?month=$navi2&yr=$yr2'>".$monate[$smonat+2]."</a> | <a href='?month=$navi3&yr=$yr3'>".$monate[$smonat+3]."</a> | <a href='?month=$navi4&yr=$yr4'>".$monate[$smonat+4]."</a>";

date_default_timezone_set("Europe/Berlin");

//$monat = date("n")+1;

$timestamp_1 = strtotime($year."-".$month."-1");
$timestamp_2 = strtotime($year."-".$month."-1 +1 month -1 second");

?>
 
Zuletzt bearbeitet:
Ein wenig komplex deine Lösung. Das folgende macht etwa dasselbe...

PHP:
setlocale(LC_TIME, "de_DE");

$date = time();
$naviSize = 5;

$monthNamesDE = array(1=>"Jan", 2=>"Feb", 3=>"M&auml;rz", 4=>"Apr", 5=>"Mai", 6=>"Jun", 
                        7=>"Jul", 8=>"Aug", 9=>"Sep", 10=>"Okt", 11=>"Nov", 12=>"Dez");

for ($i = 0; $i < $naviSize; $i++){
    $dates[] = strtotime("+{$i} Month", $date);
}

$htmls = array_map('getNaviLink', $dates);
echo implode(' | ', $htmls);


function getNaviLink($date){
    //Je nach System ghet das Formatieren mit %b trotz setlocale nicht sauber. Darum die Übersetzung mit
    //einer eigenen Liste
    $monthName = $GLOBALS["monthNamesDE"][date('n', $date)];
    return strftime("<a href='?month=%m&yr=%Y'>{$monthName}</a>", $date);    
}
 
So für alle die sich auch mal einen Eventkallender basteln wollen und vor dem gleichen Problem sind:
date_default_timezone_set() muss aber gesetzt werden bevor eine Datum-/Zeitfunktion genutzt wird.
So wie Du es jetzt gemacht hast (mittendrin) wird u.U. die Zeitzone während der Berechnung geändert..... wass dann zu einem fehlerhaften Ergebnis führen würde.
 
Zurück