php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2010

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 19.07.2010, 18:32  
Benutzer
 
Registriert seit: 15.05.2009
Beiträge: 66
PHP-Kenntnisse:
Anfänger
Micha72 befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] if-else und switch

Hallo,

heute morgen hatte ich schon mal ein Problem und Cycap und blackscorp konnten mir helfen.

Nun hänge ich schon wieder

ich muss eine if-else Anweisung mit einer switch Anweisung koppeln und es gelingt mir nicht.

Hier der Code:

PHP-Code:
if(date('W') % 2)
{
    switch(
date("d.m"))
    {

        case  
"31.03"$band "Quartal 1";break;
        case  
"30.06"$band "Quartal 2";break;
        case  
"30.09"$band "Quartal 3";break;
        case  
"31.12"$band "Quartal 4";break;
        case  
"31.01"$band "Monat 1";break;
        case  
"28.01"$band "Monat 2";break;
        case  
"30.04"$band "Monat 1";break;
        case  
"31.05"$band "Monat 2";break;
        case  
"31.07"$band "Monat 1";break;
        case  
"31.08"$band "Monat 2";break;
        case  
"31.10"$band "Monat 1";break;
        case  
"30.11"$band "Monat 2";break;
    }
    
$band strftime("%A").' 1';
}else{
  switch(
date("d.m"))
    {
        case  
"31.03"$band "Quartal 1";break;
        case  
"30.06"$band "Quartal 2";break;
        case  
"30.09"$band "Quartal 3";break;
        case  
"31.12"$band "Quartal 4";break;
        case  
"31.01"$band "Monat 1";break;
        case  
"28.01"$band "Monat 2";break;
        case  
"30.04"$band "Monat 1";break;
        case  
"31.05"$band "Monat 2";break;
        case  
"31.07"$band "Monat 1";break;
        case  
"31.08"$band "Monat 2";break;
        case  
"31.10"$band "Monat 1";break;
        case  
"30.11"$band "Monat 2";break;
    }
    
$band strftime("%A").' 2';

Das ganze dient der Dokumentation der täglichen Datensicherung. Abhängig vom Datum werden andere Bänder benötigt.

Die Reihenfolge der Bänder ist folgendermassen.

gerade Kalenderwoche = WochentagBand 1 (z.Bsp Montag 1, Dienstag 1 usw,)
ungerade KW = WochentagBand 2 (z.Bsp. Montag 2, Dienstag 2 usw.)

am letzten Tag eines Quartals = Quartal 1 bis Quartal 4

am letzten Tag des Monats (außer Quartal) = Monat 1 bzw. Monat 2 (auch im Wechsel

Daraus ergibt sich dann:

31. Januar = Monat 1
28. Februar = Monat 2
31. März = Quartal 1
30. April = Monat 1
usw.

Kann mir jemand nen Tip geben, wie ich das am geschicktesten (sodass es auch 2011 und 2012 noch funktioniert) umsetzen kann?

Vielen Dank schon mal an alle helfenden

Grüße

Micha
Micha72 ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 19.07.2010, 19:06  
Benutzer
 
Registriert seit: 15.05.2009
Beiträge: 66
PHP-Kenntnisse:
Anfänger
Micha72 befindet sich auf einem aufstrebenden Ast
Standard if-else und switch - teilweise gelöst

Hallo,

habs selbst raus bekommen:

PHP-Code:
switch(date("d.m"))
{

        case  
"31.03"$band "Quartal 1";break;
        case  
"30.06"$band "Quartal 2";break;
        case  
"30.09"$band "Quartal 3";break;
        case  
"31.12"$band "Quartal 4";break;
        case  
"31.01"$band "Monat 1";break;
        case  
"28.01"$band "Monat 2";break;
        case  
"30.04"$band "Monat 1";break;
        case  
"31.05"$band "Monat 2";break;
        case  
"31.07"$band "Monat 1";break;
        case  
"31.08"$band "Monat 2";break;
        case  
"31.10"$band "Monat 1";break;
        case  
"30.11"$band "Monat 2";break;
        case 
date('W') % == 0:$band strftime("%A").' 2';break;
        default;
$band strftime("%A").' 1';

jetzt fehlt mir zu meinem Glück nur noch, das zwar am letzten eines Monats entweder das Monatsband (1 oder2) oder das Quartalsband (1-4) angezeigt wird, der Monatsletzte aber niemals ein Wochenende sein darf

Das heist für den Juli, der 31. ist ein Samsag, da muss dann das Monatsband am Freitag angezeigt werden.

Samstags und Sonntags werden keine Bänder gewechselt, da wird Plattensicherung erstellt.

Hätte dazu noch jemand nen Tip?

Vielen Dank

Grüße
Micha72 ist offline  
Alt 19.07.2010, 20:25  
Erfahrener Benutzer
 
Benutzerbild von Dark Guardian
 
Registriert seit: 10.10.2009
Beiträge: 2.637
PHP-Kenntnisse:
Fortgeschritten
Dark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekannt
Standard

Mit dem Parameter "t" von Date kannst du die Anzahl Tage des Monats ermitteln was zugleich auch dem Monatsletztem entspricht. Den Monat wie gewohnt mit "m", das Jahr mit Y.

Daraus kannst du mit mktime() einen Timestamp erzeugen den du date() mitgeben kannst um über den Parameter "w" den Wochentag herauszufinden.

Ist dieser dann 6 oder 0 ist der Monatsletzte entweder Samstag oder Sonntag. Je nachdem musst du von deinem Datum also 1 oder 2 Tage abziehen.

Anders sieht das aus wenn du für das aktuelle Datum die Rechnung durchführst. Dann prüfst du ob Freitag ist und zusätzlich ob der Tag der Timestamps von +1 Tag oder +2 Tage date("t") entsprechen (siehe strtotime() im Manual.
__________________
"Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".
Dark Guardian ist offline  
Alt 20.07.2010, 08:05  
Benutzer
 
Registriert seit: 15.05.2009
Beiträge: 66
PHP-Kenntnisse:
Anfänger
Micha72 befindet sich auf einem aufstrebenden Ast
Standard

Hi,

Danke für deinen Hinweis.

Hättest Du vielleicht nur ein kleines Beispiel, anhand ich mich da besser rein denken kann?

Auf jeden Fall zieh ich mir jetzt erstmal das Manual dazu rein.

Vielen Dank

Grüße

Micha
Micha72 ist offline  
Alt 20.07.2010, 09:28  
Benutzer
 
Registriert seit: 15.05.2009
Beiträge: 66
PHP-Kenntnisse:
Anfänger
Micha72 befindet sich auf einem aufstrebenden Ast
Standard

Hallo,

ich nochmal.

anhand des manuals habe ich mir eine Funktion gebastelt, die auch funktioniert.

Ich erhalte als Ergebnis, den letzten Wochentag des aktuellen Monats, der KEIN Samstag oder Sonntag ist.

Soweit so gut, jedoch wenn ich damit weiter hantieren will, erhalte ich IMMER als Ergebnis Donnerstag.

Hier die Funktion:

PHP-Code:
<?php
function monletzter()
{
$anztage date('t');
$monat date('m');
$jahr date('Y');
$wochtag date('w',mktime(0,0,0,$monat,$anztage,$jahr));
if (
$wochtag == 6)
{
    
$monletzter $wochtag -1;
}
elseif (
$wochtag == 0)
{
    
$monletzter $wochtag -2;
}
else
{
    
$monletzter $wochtag;
}
    echo 
$monletzter;
}
?>
Und hier mal verschiedene Aufrufe der Funktion.

PHP-Code:
<?php
echo monletzter();                  //egibt im aktuellen Monat Juli = 5
echo "<br />";
echo 
strftime('%A',monletzter());   //ergibt im aktuellen Monat Juli = 5Donnerstag (Wochentag deutsch)
echo "<br />";
echo 
date('l'monletzter());       //ergibt im aktuellen Monat Juli = 5Thursday
?>
So ganz scheine ich das noch nicht verstanden zu haben, kann mir wer auf die Sprünge helfen?

Vielen Dank schon mal.

Grüße

Micha
Micha72 ist offline  
Alt 20.07.2010, 11:23  
Erfahrener Benutzer
 
Benutzerbild von Dark Guardian
 
Registriert seit: 10.10.2009
Beiträge: 2.637
PHP-Kenntnisse:
Fortgeschritten
Dark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekannt
Standard

date("w") gibt dir den Tag der Woche zurück und deswegen immer 5, weil 6 (Samstag) - 1 = 5 (Freitag) ergibt.

Du musst nicht vom Tag der Woche 1 oder 2 abziehen sondern vom Tagesdatum.

Du weisst das der 31.7 ein Samstag ist, also ist dein "Zieldatum" der 30.7. Wäre der 31.7 ein Sonntag ist dein Zieldatum der 29.7.

PHP-Code:
if ($wochtag == 6)
{
    
$monletzter $wochtag -1;
}
elseif (
$wochtag == 0)
{
    
$monletzter $wochtag -2;
}
else
{
    
$monletzter $wochtag;
}
    echo 
$monletzter;

Dein Fehler ist also hier. Du musst von $anztage subtrahieren und nicht von $wochtag.
__________________
"Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".
Dark Guardian ist offline  
Alt 20.07.2010, 11:34  
Benutzer
 
Registriert seit: 15.05.2009
Beiträge: 66
PHP-Kenntnisse:
Anfänger
Micha72 befindet sich auf einem aufstrebenden Ast
Standard

Hallo,

Danke Dir, habs mittlerweile teilweise gelöst.

Ich hatte mir gedacht, wenn der Monatsletzte auf einen Samstag oder Sonntag fällt, dann ist der Monatsletzte ja immer der Freitag (außer bei Feiertagen, aber das lasse ich weg).

Also hab ich die Funktion auch so gestaltet

PHP-Code:
<?php
function monletzter()
{
$wochtag date('w',mktime(0,0,0,date('m'),date('t'),date('Y')));
//wenn der letzte Tag des Monats auf einen Samstag oder Sonntag fällt
//ist der letzte Tag des Monats immer der Freitag
if ($wochtag == OR $wochtag == 0)
{
    
$monletzter 5;
}
else
{
    
$monletzter $wochtag;
}
    return 
$monletzter;
}
?>
Mit meiner Switch Abfrage klappt das soweit auch ganz gut

PHP-Code:
switch(date("d.m.Y"))
{
        case  
monletzter() == date('w') and date('m') == 03:$band "Quartal 1";break;
        case  
monletzter() == date('w') and date('m') == 06:$band "Quartal 2";break;
        case  
monletzter() == date('w') and date('m') == 09:$band "Quartal 3";break;
        case  
monletzter() == date('w') and date('m') == 12:$band "Quartal 4";break;
        case  
monletzter() == date('w') and date('m') == 01 or
              
monletzter() == date('w') and date('m') == 04 or
              
monletzter() == date('w') and date('m') == 07 or
              
monletzter() == date('w') and date('m') == 10:$band "Monat 1";break;
        case  
monletzter() == date('w') and date('m') == 02 or
              
monletzter() == date('w') and date('m') == 05 or
              
monletzter() == date('w') and date('m') == 08 or
              
monletzter() == date('w') and date('m') == 11:$band "Monat 2";break;
        case 
date('W') % == 0:$band strftime("%A").' 2';break;
        default;
$band strftime("%A").' 1';

AAAABBBER....

Genau im Monat August (31.08.2010 = Dienstag) und im Monat September (30.09.2010 = Donnerstag) bringt er mir die falschen Angaben.

Statt Monat2 für den 31.08.2010 gibt er Dienstag 1 aus.
Statt Quartal 3 für den 30.09.2010 gibt er Donnerstag 1 aus.

Alle anderen Monate funktioniert das Einwandfrei, nur diese beiden Monate nicht. (habs jedesmal getestet bei Umstellung der Systemzeit).

Woran kann das liegen?

Vielen Dank

Grüße

Micha
Micha72 ist offline  
Alt 20.07.2010, 14:16  
Erfahrener Benutzer
 
Registriert seit: 02.09.2009
Beiträge: 1.020
PHP-Kenntnisse:
Fortgeschritten
mquadrat befindet sich auf einem aufstrebenden Ast
Standard

Ich komm bei deinem Switch nicht so ganz mit. Du verwendetst das eher als umständliche Version von if..elseif.
__________________
Wir suchen PHP Entwickler (Vollzeit) im Raum Darmstadt / Rhein-Main. Infos via E-Mail mueller@new-frontiers.de
mquadrat ist offline  
Alt 20.07.2010, 15:26  
Benutzer
 
Registriert seit: 15.05.2009
Beiträge: 66
PHP-Kenntnisse:
Anfänger
Micha72 befindet sich auf einem aufstrebenden Ast
Standard

Hallo,

wie würde analog dazu die if..elseif aussehen?

Wäre die nicht erheblich länger und umfangreicher?

Vielen Dank

Grüße

Micha
Micha72 ist offline  
Alt 23.07.2010, 11:08  
Benutzer
 
Registriert seit: 15.05.2009
Beiträge: 66
PHP-Kenntnisse:
Anfänger
Micha72 befindet sich auf einem aufstrebenden Ast
Standard

Hallo,

nach langem hin und her hab ich nun endlich die Lösung gefunden *freu*.

Ich habe meine Switch Anweisung in eine if..else Anweisung gepackt und die funktion monletzter() nochmal angepasst.

meine Lösung sieht nun so aus

PHP-Code:
<?php
function monletzter()
{
$anztage date('t');
$monat date('m');
$jahr date('Y');
$wochtag date('w',mktime(0,0,0,$monat,$anztage,$jahr));
if (
$wochtag == 6)
{
    
$monletzter $anztage -1;
}
elseif (
$wochtag == 0)
{
    
$monletzter $anztage -2;
}
else
{
    
$monletzter $anztage;
}
    return 
$monletzter;
}
?>
<?php
function band()
{
    if (
date('W') %== 0)
    {
        
$band strftime('%A').' 2';
    }
    else
    {
        
$band strftime('%A').' 1';
    }
return 
$band;
}
 
?>
<?php
if (monletzter() == date('d'))
{
     switch(
date("d.m.Y"))
    {
        case  
date('m') == '03':$band "Quartal 1";break;
        case  
date('m') == '06':$band "Quartal 2";break;
        case  
date('m') == '09':$band "Quartal 3";break;
        case  
date('m') == '12':$band "Quartal 4";break;
        case  
date('m') == '01' or
              
date('m') == '04' or
              
date('m') == '07' or
              
date('m') == '10':$band "Monat 1";break;
        case  
date('m') == '02' or
              
date('m') == '05' or
              
date('m') == '08' or
              
date('m') == '11':$band "Monat 2";break;
    }
}
else
{
    
$band band();
}
?>
und klappt bestens.

Vielen Dank an alle Helfer

Grüße

Micha
Micha72 ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Auf Array zugreifen bringt fehler SteiniKeule PHP Tipps 2010 10 08.04.2010 15:13
Kleine Themplate Class Deltachaos PHP-Fortgeschrittene 8 22.01.2010 22:29
http_class verwenden hans213 PHP Tipps 2009 27 15.01.2010 03:07
Login-Script in Ordnung? Silent PHP Tipps 2009 73 26.11.2009 01:02
JS-Kalender funktioniert nicht im IE8 ToxicToast JavaScript, Ajax und mehr 4 18.11.2009 16:26
variable mit onclick an php drombusch PHP Tipps 2009 8 30.08.2009 14:45
Vorlagen Manko10 Wiki Diskussionsforum 22 08.10.2008 15:15
Voraussetzungen für dieses Thumbnail Skript Plague PHP Tipps 2008 9 19.09.2007 13:35
Problem und Frage zu Listenfeldauswertung .... bp158 PHP Tipps 2006 2 10.07.2006 22:37
2 switch abfragen in einer datei!? CHRIS PHP Tipps 2005-2 6 29.06.2005 20:17
else if() vs switch DerDesian PHP Tipps 2005 4 24.03.2005 12:19
If/ else if/ else bedingung richtig trotzdem falsch?!? seejay PHP Tipps 2005 8 09.02.2005 12:59
if else im else von if else *~* PHP Tipps 2004 3 20.09.2004 20:47
probleme mit if und else PHP Tipps 2004 3 19.08.2004 02:56

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
monats zweiter dienstag php, switch php, switch case tag und monat, php switch case date, date(\d.m.y\, strtotime(\$ gibt immer heutiges datum aus, quartal php datum, php erster tag eines quartals, strftime quartal, if else date sonntag, php kann man else mit switch case verbinden, von if in else wechseln php, mktime bildwechsel, php strtotime ende des quartals, php date if, wochentag eines datums c, if in switch case php, wochenenden des monats ermitteln php, php letzter tag eines quartals, php switch wochentag, quartal strtotime

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:08 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum