Wochenenden & Feiertage herausrechnen

BriXen

Erfahrenes Mitglied
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
 
Zuletzt bearbeitet:
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 :)
 
Zuletzt bearbeitet:
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
 
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
 
achso hab ich vergessen:

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

MfG
 
Zuletzt bearbeitet:
PHP:
$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
 
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 :rolleyes:

MfG
 
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.

PHP:
$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
 
Zuletzt bearbeitet:
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.

Code:
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
 

Neue Beiträge

Zurück