Avatar billede nerdyguy Nybegynder
29. juni 2004 - 13:42 Der er 6 kommentarer og
1 løsning

Trække lørdag+søndag fra datoer imellem 2 DATE felter.

Har 2 DATE felter, hvor jeg skal bruge en select-streng der kan returnere antal date imellem de to datoer.

F.eks:
start_dato = 2004-06-01
slut_dato = 2004-06-30

Resultatet skal være 22  (altså alle arbejdsdage).

Accepterer også andre alternativer. Det skal bruges til et PHP-script.
Avatar billede jpvj Nybegynder
29. juni 2004 - 13:44 #1
Jeg har ikke lige tid til at konvertere til PHP for dig, men her er en Access artikel med et VBA eksempel

http://www.databasejournal.com/features/msaccess/article.php/1552691

Se funktionen GetNumberOfWorkingDays
Avatar billede nerdyguy Nybegynder
29. juni 2004 - 13:53 #2
Har keine forstand på Access eller VB/ASP, sorry.
Avatar billede dennismp Nybegynder
29. juni 2004 - 14:21 #3
function date2ts($date) {
  list($m,$d,$y) = explode("-",$date);
  return mktime(0,0,0,$m,$d,$y);
}

$start_ts =  date2ts('2004-06-01');
$end_ts =  date2ts('2004-06-01');

$days = 0;
while($start_ts < $end_ts) {
  $w = date('w',$start_ts);
  if( $w != 0 && $w != 6 )
    $days++;
  $start_ts += 86400;
}
Avatar billede dennismp Nybegynder
29. juni 2004 - 14:21 #4
print "der er $days arbejdsdage";

det er utestet :)
Avatar billede nerdyguy Nybegynder
29. juni 2004 - 17:01 #5
Det er accepteret, du ledte os i den rigtige retning:

function date2ts($date) {
    list($y,$m,$d) = explode("-",$date);
    if (checkdate($m,$d,$y)) {
        return mktime(0,0,0,$m,$d,$y);
    } else {
        return false;
    }
}
function workdays ($d1,$d2) {
    $d1 =  date2ts($d1);
    $d2 =  date2ts($d2);
    $workdays = 0;
    while($d1 < $d2) {
        $w = date('w',$d1);
        if( $w != 0 && $w != 6 ) $workdays++;
        $d1 += (60*60*24);
    }
    return $workdays+1;
}
Avatar billede dennismp Nybegynder
01. juli 2004 - 18:47 #6
Der er en fejl. Hvis du sætter fx. start/slut dato til at være lørdag, vil du få een arbejdsdag. Jeg tror det er nemt at rette, da du blot skal ændre while($d1 < $d2) til while($d1 <= $d2) . og så fjerne "+1" i din return.
Avatar billede nerdyguy Nybegynder
02. juli 2004 - 09:48 #7
Takker dennismp. Vi har rettet funktionen til, samt inkluderet automatisk udregning af helligdage, da disse heller ikke gælder som arbejdsdage.

Takker for hurtig respons.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester