# Wochenenden & Feiertage herausrechnen



## BriXen (6. Mai 2004)

Hallo,

ich muss euch schon wieder mit nem Problem von mir nerven.
Ich möchte Urlaubs daten verwalten. wenn ich jetzt nen neuen Urlaub angelegt hab, berechnet mir danach ne Abfrage wieviel Tage es waren. Nur leider werden da die Wochenden und Feiertage nicht berücksichtigt. Hat einer von euch vielleicht ne Idee, wie ich das Prob lösen könnte 

Mir is bis jetzt nix brauchbares eingefallen.

MfG

PS: ich hab die SUCH-Funktion benutzt aber nix passendes gefunden


----------



## melmager (6. Mai 2004)

Ok am einfachsten ist die sache mit den Wochenende da kann man SQL selbst fragen 

SQL kennt die Function weekday(datumsfeld)
dann kommt ne zahl raus 0 = montag 6= Samstag 7 = Sonntag

Feiertage ist schon schwerer; aber auch da gibt es für PHP fertige Funktionen 

Ein Link zum Berechnen der Feiertage (fast alle richten sich nach Ostern)
ist hier http://www.mug-d.de/mboerse/1998_3/bantel.html

und Ostern kann man so berechnen:

http://www.stadtaus.com/tutorials/ostern_berechnen.php

Achja Bundesländer müssen auch berücksichtigt werden


----------



## BriXen (6. Mai 2004)

hm k,

also muss ich jeden einzelnen Tag abfragen mit diesem weekday befehl 
dumme Frage: wie mach ich das?
2.dumme Frage: da es zeitspannen von mehreren Tagen sind, gibts da nicht sowas wie eine "Routine" die das Abfragt?

könnt ihr mir da bitte ein wenig konkreter helfen 

vielen Dank schon mal im Voraus

MfG

BriXen


----------



## melmager (7. Mai 2004)

Gegenfrage wie trägst du den Zeitraum in die DB ein ?


----------



## BriXen (7. Mai 2004)

so also,

es gibt 2 Felder, K-von, K-bis,
beide sind mit date formatiert, also standart.
jetzt berechne ich K-bis - K-von,
und hier soll er jetzt die wochenenden rausrechnen
MfG


----------



## BriXen (7. Mai 2004)

achso hab ich vergessen:

eingegeben werden die Daten über ein Formular.
ich trage das Anfangsdatum und das Enddatum ein.

MfG


----------



## melmager (7. Mai 2004)

```
$erg = mysql_query("select week(vondatum) as von, week(bisdatum) as bis,(to_days(bisdatum) - to_days(vondatum)) as tage  from tabelle",$dblink);

$row = mysql_fetch_array($erg);

if ($row['von'] > $row['bis']) {
 $wochen = $row['bis'] - $row['von'] + 53;
} else {
 $wochen = $row['bis'] - $row['von'];
}

$utage = $row['tage'] - ($wochen * 2);

echo "es sind $utage Urlaubstage";
```

als kleine Anregung


----------



## BriXen (7. Mai 2004)

ok vielen Dank für die Anregung.
hab jetzt grad keine Zeit, werd aber heute Nacht gleich mal den Code an meine DB anpassen und ausprobieren.
Ehrlich gesagt wäre ich nichtt auf den Code gekommen  

MfG


----------



## BriXen (12. Mai 2004)

Hi,
so hab nun endlich Zeit gefunden mich damit wieder zu beschäftigen.
hab mir mal so meine Gedanken gemacht und bin auf Datenzugriffsseiten gekommen, leider kenn ich mich damit nun gar nicht aus.

nochmal kurz meine DB struktur:

M-Daten
------------

 M-Nr
 M-Name
 M- Vorname
 M-UAnspruch

M-Krank
------------

 K-Nr
 K-von
 K-bis
 M-Nr

so das Script oben hab ich folgendermaßen umgeaendert.


```
$erg = mysql_query("select week(K-von) as von, week(K-bis) as bis,(to_days(K-bis) - to_days(K-von)) as tage  from M-Krank",$dblink); 

$row = mysql_fetch_array($erg); 

if ($row['von'] > $row['bis']) { 
$wochen = $row['bis'] - $row['von'] + 53; 
} else { 
$wochen = $row['bis'] - $row['von']; 
} 

$utage = $row['tage'] - ($wochen * 2); 

echo "es sind $utage Urlaubstage";
```

mit dem $dblink komm ich noch nicht so richtig klar. ich erstell ne Variable die dann die Verbindung zur Datenbank beinhaltet ? mit welchem Befehl verbinde ich die datenzugriffsseite mit der Accessdatenbank?

MfG

BriXen


----------



## BriXen (13. Mai 2004)

Hallo @ all,

schade das mir hir keiner mehr helfen will. Ich hänge jeden Tag drüber aber bekomms net hin. ich hab jetzt noch ne andere variante gefunden.
Ein ungebundenes Textfeld, was eine ereigniss prozedur nach aktualisieren hat.

Der Code ist meines Wissens relativ richtig, trotzdem funktioniert er nicht. das feld bleibt leer.

wenn sich jemand mal den Code angucken könnte, bitte, es ist sehr wichtig.


```
Private Sub Text36_AfterUpdate()
Dim zdat As Date
Dim dbltage As Double
Dim datvon As Date
Dim datbis As Date
Dim tb As ADODB.Recordset
Dim db As ADODB.Connection
Dim dblfak As Double

datvon = [M-Krank]![K-von].Value
datbis = [M-Krank]![K-bis].Value


dbltage = 0
dblfak = 0
If datvon > datbis Then
    MsgBox "Datumsgrenzen sind falsch!"
    Me.[M-Krank]![K-von].Value = ""
    Me.[M-Krank]![K-bis].Value = ""
    Me.[M-Krank]![Tage].Value = ""
    Me.[M-Krank]![K-von].SetFocus
Else
    
    For zdat = datvon To datbis Step 1
        If Weekday(zdat) > 1 And Weekday(zdat) < 7 Then
        
            Set db = CurrentProject.Connection
            Set tb = New ADODB.Recordset
            tb.Open "Feiertage", db, adOpenKeyset, adLockOptimistic, adCmdTable
            tb.MoveFirst
        
            While Not tb.EOF
                If zdat = tb!Datum Then
                
                    dblfak = tb!Art.Value / 2
                
                End If
                tb.MoveNext
            Wend
            If dblfak > 0 Then dbltage = dbltage + (1 * dblfak) Else dbltage = dbltage + 1
        
        End If
    
    Next zdat
    Tage.Value = dbltage
End If

End Sub
```

Bitte helft mir, ich komm hier nicht weiter.

MfG


----------



## BriXen (13. Mai 2004)

tut mir leid ...

der Mist hier kann gelöscht werden.

MfG


----------

