Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Datumsberechnung [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
ebiz-webhosting
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Datumsberechnung


 
Fribu
03-08-2002, 10:17 
 
Hallo,
ich brauche einen Denkanstoß für die Berechnung der Anuahl von Arbeitstagen in einem MySql-String.

Hintergrund in einer Datenbank sind zwei Datumsfelder, die Differenz soll nicht die Anzahl der Kalendertage sondern in Arbeitstagen erstellt werden. Ich dachte schon an eine Benutzerdefinierte Function, nur kann ich diese auch bei einem NT-Server mit MySql verwenden.

Fribu

 
Titus
03-08-2002, 12:35 
 
benutzerdefinierte Funktionen gibt´s doch erst in mySQL 4, oder?

imho geht das am einfachsten per php:
$q = mysql_query('select anfang, ende, weekday(anfang),
to_days(anfang), to_days(ende) from tabelle');
while (list($anfang,$ende,$w,$a,$z)=mysql_fetch_row($q))
{
$n = 1+$z-$a;
// Sams- und Sonntage abziehen
for ($d = $a; $d<=$z; $d++)
{
if ($w++>4) $n--;
$w %= 7;
}
echo "$anfang bis $ende: $n Arbeitstage<br>";
}Die Schleife kann man natürlich noch wegoptimieren und durch eine mehr oder weniger komplizierte Berechnung ersetzen.

siehe auch im mySQL-Handbuch: Datums- und Zeit-Funktionen (http://de.mysql.com/documentation/mysql/bychapter/manual.de_Reference.html#Date_and_time_functions)

 
Fribu
03-08-2002, 14:00 
 
Danke für die Antwort.

Die Lösung mit PHP ist einleuchtend. Ich habe nur das Problem in einer SQl-Abfrage: select sum( if(datum1 - datum2 < 10 ), 1, 0) .... wobei 10 in Arbeitstagen gerechnet werden muss, auch Feiertage.
Hintergrund: Früher wurden solche Listen mit Excel erstellt und das kann Arbeitstage mittels Function berechnen. Jetzt muss das auch über php/mysql geschehen.

Fribu

 
Titus
03-08-2002, 15:39 
 
hmm ... eine Möglichkeit wäre, alle Werktage oder alle Nicht-Werktage in einer zusätzlichen Tabelle zu speichern und die Anzahl der im Zeitraum mit einem count join per between (http://de.mysql.com/documentation/mysql/bychapter/manual.de_Reference.html#IDX1107) zu ermitteln.

select t.anfang, t.ende, count(w.datum)
from tabelle t
left join werktage w on w.datum between t.anfang and t.ende
group by t.anfang, t.ende

Die Erstellung der Tabelle Werktage ist zwar ein wenig aufwendig, aber vermutlich sinnvoller als eine seitenlange Funktion zur Ermittlung von Feiertagen in die Query einzubauen.

 
Fribu
03-08-2002, 21:17 
 
Hallo,
so eine Arbeitstagfunction ist gar nicht so umfangreich, da sich ja fast alle Feiertage mit der Osterformel berechnen lassen und die Wochendenenden lassen sicher herauszählen. Die Referenztabelle hat den Nachteil ständig gepfegt werden zu müssen.
Gibt es irgendwo eine vielleicht sogar deutschsprachige Dokumentation über das create function und ob sich das unter NT einbinden lässt. Ich arbeite mit MySql 3.36 und in der Doku gibt es bereits Create Function. Meine Vorstellung wäre so eine Feiertagsfunction in eine DLL einbinden, die dann von MySql verwendet wird ???

Fribu

 
Titus
04-08-2002, 08:26 
 
Auf http://www.mysql.de/ ist das MySQL-Handbuch seit ein paar Wochen auch auf deutsch zu finden. Momentan scheint die Site aber leider down zu sein. :dontknow:

- -

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