Avatar billede lsskaarup Nybegynder
03. februar 2007 - 22:57 Der er 22 kommentarer og
1 løsning

Arbejdsdage mellem 2 datoer

Jeg skal have hjælp til at lave en funktion, der returnere antal arbejdsdage imellem 2 datoer. Jeg har siddet og kæmpet med den i noget tid nu, og troede den var der, men så begynder unix tidsangivelserne sgu er springe 1 time, uden at jeg lige kan se hvorfor.

Nå, men jeg skal have returneret antal arbejdsdage imellem 2 datoer, d.v.s at den skal tage højde for weekender, helligdage og ferie. Det sidste venter jeg med, til de 2 første virker som de skal, så bare spring over dem indtil videre.

Funktionen skal håndtere en deadlinedato og en udførselsdato, og der skal returneres enten 0, et negativt eller positivt antal arbejdsdage. Datoer kommer som yyyy-mm-dd. Helligdagene kan hardkodes ind.
Avatar billede showsource Seniormester
03. februar 2007 - 23:08 #1
http://www.eksperten.dk/spm/758580

i forløkken, i stedet for echo, bruger du så

$dage = 0;

    for($dag = 0; $dag <= $alldays; $dag++) {
        if(date("N", (($dag*86400)+$start)) > 5) {
        continue;
        }
    $dage++;
    }

echo $dage;

"N" virker med ver. 5.1.0+

Og ellers bruge "w" og ændre if til 0 eller 6 ( 0 søndag, 6 lørdag )
Avatar billede lsskaarup Nybegynder
03. februar 2007 - 23:20 #2
Det dur ikke, dræber fuldstændig serveren. Jeg får intet svar, og da jeg køre i ver. 4.3.2 s¨dur N heller ikke.
Avatar billede lsskaarup Nybegynder
03. februar 2007 - 23:27 #3
Hvordan kan det være, at jeg ikke får et lige antal dage ud, når jeg gøre følgende:

$deadline = explode("-", $deadline);
$udfort = explode("-", $udfort);
$endag = 24 * 60 * 60;
$unixdeadline = mktime(0,0,0, $deadline[1], $deadline[2], $deadline[0]);
$unixudfort = mktime(0,0,0, $udfort[1], $udfort[2], $udfort[0]);
$forskel = $unixdeadline - $unixudfort;
echo $antaldage = $forskel/$endag;

Både deadline og udført kommer som yyyy-mm-dd, helt præcist 2006-03-08 og 2006-04-18 .
Avatar billede showsource Seniormester
04. februar 2007 - 08:21 #4
jahh, ved det ikkel lige!
Og ovenstående link vil jo heller ikke virke for forskellige år.......
Du kan bruge strtotime()
$unixdeadline = strtotime($deadline);
$unixudfort = strtotime($udfort);

Henter du fra DB?
Så kan DATEDIFF bruges til at finde antal dage:

$days = mysql_query("SELECT DATEDIFF(`slut`, `start`) FROM `tabel` LIMIT 1") or die (mysql_error());
$antaldage = mysql_result($days, 0);
Avatar billede showsource Seniormester
04. februar 2007 - 08:30 #5
$dag_et = "2005-12-30";
$dag_to = "2007-01-12";
$start = strtotime($dag_et);

$days = mysql_query("SELECT DATEDIFF('". $dag_to ."', '". $dag_et ."')") or die (mysql_error());
$antaldage = mysql_result($days, 0);

echo $antaldage;

echo"<p>";

    $dage = 0;
    for($dag = 0; $dag <= $antaldage; $dag++) {
    $ugedag = date("w", (($dag*86400)+$start));
        if($ugedag < 1 || $ugedag > 5) {
        continue;
        }
    $dage++;
    }

echo $dage;
Avatar billede showsource Seniormester
04. februar 2007 - 08:39 #6
Og ved ikke lige hvordan, men noget med at det er rimeligt nemt at udregne helligdage hvis man kender påskedag,
http://dk.php.net/manual/da/function.easter-date.php
Avatar billede lsskaarup Nybegynder
04. februar 2007 - 11:53 #7
Har brugt DATEDIFF, skippede den da den jo ikke tager højde for weekender, helligdage og ferier, måske skal jeg indføre den igen, som terminator i forløkken.

Jeg har udregnet helligdagene, og når udførselsesdatoen ligger før deadline, så springer den også over på weekender og helligdage, det gniber dog noget når deadline er overskredet.

Min kode som den ser ud pt:

    function find_arbejdsdage($deadline, $udfort){
        if($deadline == "0000-00-00" || $udfort == "0000-00-00") {
            $forskel = "Uberegnelig";
        } else {

            $deadline = explode("-", $deadline);
            $udfort = explode("-", $udfort);
            $endag = 24 * 60 * 60;
            $paaskedag_to = easter_date($udfort[0])+$endag;
            $skartorsdag = easter_date($udfort[0])-($endag*3);
            $langfredag = easter_date($udfort[0])-(2*$endag);
            $kristi = easter_date($udfort[0])+(39*$endag);
            $pinsedag_to = easter_date($udfort[0])+(50*$endag);
            $bededag = easter_date($udfort[0])+(26*$endag);


            $unixdeadline = mktime(0,0,0, $deadline[1], $deadline[2], $deadline[0]);

            $unixudfort = mktime(0,0,0, $udfort[1], $udfort[2], $udfort[0]);

            if ($unixdeadline == $unixudfort){
                $forskel = "0";
            } elseif ($unixdeadline < $unixudfort){

                $forskel = $unixdeadline - $unixudfort;
                echo $antaldage = $forskel/$endag;
/*
//Hvorfor bliver kode så langsom når jeg har unixtimestamps i forløkken?
                for ($i = $unixdeadline; $i <= $unixudfort; $i+86400){
                    echo $i;
echo "<br>";
                    echo date("d-m-Y G:i:s", $i);
                }*/

            } else {

                $forskel = $unixdeadline - $unixudfort;
                $antaldage = $forskel/$endag;
                $fridage=0;

                for ($i = 1; $i <= $antaldage; $i++){
                    $tempdato = $unixudfort + ($i*$endag);

                    //Mangler stadig datoerne som er indtastet som feriedage

                    //Er det én af de faste helligdage
                    if ( $tempdato == $paaskedag_to || $tempdato == $skartorsdag || $tempdato == $langfredag || $tempdato == $kristi || $tempdato == $pinsedag_to || $tempdato == $bededag){
                        $fridage = $fridage+1;
                    }

                    //Er det en weekend
                    if (date("w", $tempdato) == 0 || date("w", $tempdato) == 6) {
                        $fridage = $fridage+1;
                    }
                }

                $forskel = $antaldage - $fridage;
                //$forskel = "efter deadline";
            }

    }

    return $forskel;

}
Avatar billede lsskaarup Nybegynder
04. februar 2007 - 12:53 #8
Hmm, det ser ud som om det hjælpe at sove på det

--- Delen der tager sig af udskredne deadlines ---
                $unixforskel = $unixdeadline - $unixudfort;
                $antaldage = round($unixforskel/$endag);
                $fridage=0;

                //Til forløkken
                $nyantaldage = $antaldage *-1;

                for ($i = 1; $i <= $nyantaldage; $i++){
                    $tempdato = $unixdeadline + ($i*$endag);

                    //Mangler stadig datoerne som er indtastet som feriedage

                    //Er det én af de faste helligdage
                    if ( $tempdato == $paaskedag_to || $tempdato == $skartorsdag || $tempdato == $langfredag || $tempdato == $kristi || $tempdato == $pinsedag_to || $tempdato == $bededag){
                        $fridage = $fridage+1;
                    }

                    //Er det en weekend
                    if (date("w", $tempdato) == 0 || date("w", $tempdato) == 6) {
                        $fridage = $fridage+1;
                    }
                }
                $forskel = $antaldage + $fridage;

Den ser ud til at returnere de korrekte antal arbejdsdage, tror lige jeg holder lidt øje den.

Lader derfor spørgsmålet stå åbent lidt endnu, og hvis du showsource, kan optimere koden, må du meget gerne det. Jeg tænker her på, så jeg ikke behøves, at tjekke for om deadlines er overskredet eller ej, som jeg gør nu før jeg udregner selve forskellen.
Avatar billede showsource Seniormester
04. februar 2007 - 13:11 #9
Fridage, det er vel denne?
            $paaskedag_to = easter_date($udfort[0])+$endag;
            $skartorsdag = easter_date($udfort[0])-($endag*3);
            $langfredag = easter_date($udfort[0])-(2*$endag);
            $kristi = easter_date($udfort[0])+(39*$endag);
            $pinsedag_to = easter_date($udfort[0])+(50*$endag);
            $bededag = easter_date($udfort[0])+(26*$endag);

Og "overskredet deadline" er jeg ikke lige helt med på?
Avatar billede showsource Seniormester
04. februar 2007 - 13:11 #10
Og hvad nu hvis det er fra den ene år til det andet?????
Avatar billede showsource Seniormester
04. februar 2007 - 15:05 #11
hmm, dette her virker vist fint nok, uanset årstal.

function work_days($start_dato, $slut_dato) {

$days = mysql_query("SELECT DATEDIFF('". $slut_dato ."', '". $start_dato ."')") or die (mysql_error());
$antaldage = mysql_result($days, 0);
mysql_free_result($days);

    if($antaldage <= 0) {
    return $antaldage;
    }

$start = strtotime($start_dato);

// Funktion til at putte vars i array'et med fridage.
// funktion hvis nu det skal være for forskellige år

function make_array($myarray, $year) {

    if(!is_array($myarray)) {
    return false;
    }else{

    // gider ikke lige tælle dage til jul, men et fast antal er der vel?
    $myarray[] = strtotime($year ."-12-25");
    $myarray[] = strtotime($year ."-12-26");

    $fridage = array(3,2,1,26,39,50); // dage som skal trækkes fra/lægges til $paaskedag
    $paaskedag = easter_date($year);

        for($k = 0; $k < count($fridage); $k++) {
            if($k < 2) {
            $myarray[] = ($paaskedag-($fridage[$k]*86400));
            }else{
            $myarray[] = ($paaskedag+($fridage[$k]*86400));
            }
        }
    return $myarray;
    }
}


$start_year = date("Y", $start);
$slut_year = date("Y", strtotime($slut_dato));
$off_days = array();

$off_days = make_array($off_days, $start_year);

    if($start_year != $slut_year) {
        for($aar = $start_year; $aar <= $slut_year; $aar++) {
        $off_days = make_array($off_days, $aar);
        }
    }



    $dage = 0;
    for($dag = 0; $dag <= $antaldage; $dag++) {
    $unix_tid = ($start+($dag*86400));
    $ugedag = date("w", $unix_tid);
        if($ugedag < 1 || $ugedag > 5 || in_array($unix_tid, $off_days)) {
        continue;
        }
    $dage++;
    }

return $dage;

}


$dag_et = "2006-12-24";
$dag_to = "2007-04-13";

echo work_days($dag_et, $dag_to);
Avatar billede showsource Seniormester
04. februar 2007 - 15:06 #12
og hov, nytårsdag er jo også en fridag
Avatar billede lsskaarup Nybegynder
04. februar 2007 - 19:55 #13
Hmm, hvorfor virker min ikke hvis det er over flere år?

Og, ja, jeg ved det ikke er alle helligdage, som jeg har med, det skal også udvides, så feriedag (indtastet i admin-delen, og gemt i et array i en php-side) også undlades i den relle arbejdsdage optælling.

Jeg har lige hurtigt kigget på din kode, og hvad mener du lige med

// gider ikke lige tælle dage til jul, men et fast antal er der vel?

Du har jo 1. og 2. juledag...

Men jeg lige prøve om jeg ikke kan få kigget nærmere på det én af de først kommende dage.
Avatar billede lsskaarup Nybegynder
04. februar 2007 - 20:14 #14
For at lige forklarer det lidt nærmere.

Det er et salgs-/ordre system, hvor brugerne skal have en oversigt over alle ordre, der ar fået udskrevet en ordrebekræftelse inden for en bestemt periode.

En enkelt ordre har flere delpunkter den skal igennem, er der lavet statik, er den tegnet o.l. Alle disse delpunkter, har en deadline i forhold til ordrebekræftelsen, men da brugeren også skal udfylde hvornår det enkelte delpunkte er blevet udført, kan vi se, om det var før, efter eller på deadline dagen, at den f.eks. blev meldt klar til statik.

Tilbage til oversigten, jeg prøver lige at illustrerer den:

|-----------------------------------------------|
|                |    klar til statik            |
|-----------------------------------------------|
|    ordre    |  deadline  | udført | forskel |
|-----------------------------------------------|

ordre = ordrenr.
deadline = deadline for "Klar til statik"
udført = dato for hvornår ordren er meldt "Klar til statik"
forskel = forskellen i arbejdsdage på de 2 foregående datoer, skal både kune være negativt (deadline overskredet) og positivt (deadline holdt).
Avatar billede showsource Seniormester
04. februar 2007 - 20:21 #15
aha ! :O)
Jeg er jo bare gået ud fra at det var +plusdage som var brugbar, selvom du skrev 0 og minusværdier.

Det med tid til jul, var fordi jeg i min tåbelighed troede der var fat antal dage til jul, men det er der selvf. ikke.


function work_days($start_dato, $slut_dato) {

$days = mysql_query("SELECT DATEDIFF('". $slut_dato ."', '". $start_dato ."')") or die (mysql_error());
$antaldage = mysql_result($days, 0);
mysql_free_result($days);

    if($antaldage <= 0) {
    return $antaldage;
    }


// Funktion til at putte vars i array'et med fridage.
// funktion hvis nu det skal være for forskellige år

function make_array($myarray, $year) {

    if(!is_array($myarray)) {
    return false;
    }else{

    // gider ikke lige tælle dage til jul, men et fast antal er der vel?
    $myarray[] = strtotime($year ."-12-25");
    $myarray[] = strtotime($year ."-12-26");
    $myarray[] = (strtotime($year ."-12-31")+86400);

    $paaskedag = easter_date($year);
    $fridage = array(3,2,1,26,39,50); // dage som skal trækkes fra/lægges til $paaskedag

        for($k = 0; $k < count($fridage); $k++) {
            if($k < 2) {
            $myarray[] = ($paaskedag-($fridage[$k]*86400));
            }else{
            $myarray[] = ($paaskedag+($fridage[$k]*86400));
            }
        }
    return $myarray;
    }
}

// END function make_array()


$start = strtotime($start_dato);

$start_year = date("Y", $start);
$slut_year = date("Y", strtotime($slut_dato));
$off_days = array();


    if($start_year != $slut_year) { // hvis forskelligt årstal
        for($aar = $start_year; $aar <= $slut_year; $aar++) {
        $off_days = make_array($off_days, $aar);
        }

    }else{

    $off_days = make_array($off_days, $start_year);

    }



    $dage = 0;
    for($dag = 0; $dag <= $antaldage; $dag++) {
    $unix_tid = ($start+($dag*86400));
    $ugedag = date("w", $unix_tid);
        if($ugedag < 1 || $ugedag > 5 || in_array($unix_tid, $off_days)) {
        continue;
        }
    $dage++;
    }

return $dage;

}


$dag_et = "2007-12-17";
$dag_to = "2008-01-04";

echo work_days($dag_et, $dag_to);
Avatar billede showsource Seniormester
04. februar 2007 - 20:27 #16
Du henter jo deadline og udført, der kan du vel tjekke hvilken som er størst, og ud fra det sætte +/- for det endlige resultat?
Avatar billede showsource Seniormester
04. februar 2007 - 20:38 #17
function work_days($start_dato, $slut_dato) {

$days = mysql_query("SELECT DATEDIFF('". $slut_dato ."', '". $start_dato ."')") or die (mysql_error());
$antaldage = mysql_result($days, 0);
mysql_free_result($days);

    if($antaldage == 0) {
    return $antaldage;
    }

    if($antaldage < 0) {
    $antaldage = substr($antaldage, 1);
    }


// Funktion til at putte vars i array'et med fridage.
// funktion hvis nu det skal være for forskellige år

function make_array($myarray, $year) {

    if(!is_array($myarray)) {
    return false;
    }else{

    // gider ikke lige tælle dage til jul, men et fast antal er der vel?
    $myarray[] = strtotime($year ."-12-25");
    $myarray[] = strtotime($year ."-12-26");
    $myarray[] = (strtotime($year ."-12-31")+86400);

    $paaskedag = easter_date($year);
    $fridage = array(3,2,1,26,39,50); // dage som skal trækkes fra/lægges til $paaskedag

        for($k = 0; $k < count($fridage); $k++) {
            if($k < 2) {
            $myarray[] = ($paaskedag-($fridage[$k]*86400));
            }else{
            $myarray[] = ($paaskedag+($fridage[$k]*86400));
            }
        }
    return $myarray;
    }
}

// END function make_array()


$start = strtotime($start_dato);

$start_year = date("Y", $start);
$slut_year = date("Y", strtotime($slut_dato));
$off_days = array();


    if($start_year != $slut_year) { // hvis forskelligt årstal
        for($aar = $start_year; $aar <= $slut_year; $aar++) {
        $off_days = make_array($off_days, $aar);
        }

    }else{

    $off_days = make_array($off_days, $start_year);

    }



    $dage = 0;
    for($dag = 0; $dag <= $antaldage; $dag++) {
    $unix_tid = ($start+($dag*86400));
    $ugedag = date("w", $unix_tid);
        if($ugedag < 1 || $ugedag > 5 || in_array($unix_tid, $off_days)) {
        continue;
        }
    $dage++;
    }

return $dage;

}


$deadline = "2007-04-03";
$udfoert = "2007-04-20";

echo work_days($deadline, $udfoert);

if(strtotime($udfoert) > strtotime($deadline)) {
echo" Snavs!";
}
Avatar billede showsource Seniormester
04. februar 2007 - 21:00 #18
Nåh, prøver lige en sidste gang, .........


function work_days($start_dato, $slut_dato) {

$days = mysql_query("SELECT DATEDIFF('". $slut_dato ."', '". $start_dato ."')") or die (mysql_error());
$antaldage = mysql_result($days, 0);
mysql_free_result($days);

    if($antaldage == 0) {
    return $antaldage;
    }

    if($antaldage < 0) {
    $antaldage = substr($antaldage, 1);
    }


// Funktion til at putte vars i array'et med fridage.
// funktion hvis nu det skal være for forskellige år

function make_array($myarray, $year) {

    if(!is_array($myarray)) {
    return false;
    }else{

    $myarray[] = strtotime($year ."-12-25");
    $myarray[] = strtotime($year ."-12-26");
    $myarray[] = (strtotime($year ."-12-31")+86400);

    $paaskedag = easter_date($year);
    $fridage = array(3,2,1,26,39,50); // dage som skal trækkes fra/lægges til $paaskedag

        for($k = 0; $k < count($fridage); $k++) {
            if($k < 2) {
            $myarray[] = ($paaskedag-($fridage[$k]*86400));
            }else{
            $myarray[] = ($paaskedag+($fridage[$k]*86400));
            }
        }
    return $myarray;
    }
}

// END function make_array()


$start = strtotime($start_dato);

$start_year = date("Y", $start);
$slut_year = date("Y", strtotime($slut_dato));
$off_days = array();


    if($start_year != $slut_year) { // hvis forskelligt årstal

        if($start_year < $slut_year) {
            for($aar = $start_year; $aar <= $slut_year; $aar++) {
            $off_days = make_array($off_days, $aar);
            }
        }else{
            for($aar = $slut_year; $aar <= $start_year; $aar++) {
            $off_days = make_array($off_days, $aar);
            }
        $start = strtotime($slut_dato);
        }

    }else{

    $off_days = make_array($off_days, $start_year);

    }



    $dage = 0;
    for($dag = 0; $dag <= $antaldage; $dag++) {
    $unix_tid = ($start+($dag*86400));
    $ugedag = date("w", $unix_tid);
        if($ugedag < 1 || $ugedag > 5 || in_array($unix_tid, $off_days)) {
        continue;
        }
    $dage++;
    }

return $dage;

}


$deadline = "2006-12-31";
$udfoert = "2007-01-08";

echo work_days($deadline, $udfoert);

if(strtotime($udfoert) > strtotime($deadline)) {
echo" Snavs!";
}
Avatar billede lsskaarup Nybegynder
05. februar 2007 - 21:31 #19
Det virker ikke, får følgende fejl:

Fatal error: Cannot redeclare make_array() (previously declared in d:\www\test\kvalitet_process.php:119) in d:\www\test\kvalitet_process.php on line 119


Men du er stadig ikke kommet med en forklaring på hvorfor min kode, ikke skulle virke med flere forskellige år?

Jeg tror også lige jeg smider hele kode op, så du kan se hele sammenhængen.
Avatar billede lsskaarup Nybegynder
05. februar 2007 - 21:34 #20
<?php
    require('system/global_defs.php');
   
    include('system/access.php');
    include('system/date.php');
    include('static/kunde.php');
    include('person/system/jobinfo_data.php');





//arbejdsdage

    //Find dato til felt 532
    function find_arbejdsdage($deadline, $udfort, $datediff){
/*
echo $deadline;
echo "<br>";
echo $udfort;
echo "<br>";
echo $datediff;
echo "<br>";
*/

        if($deadline == "0000-00-00" || $udfort == "0000-00-00") {
            $forskel = "Uberegnelig";
        } else {

            $deadline = explode("-", $deadline);
            $udfort = explode("-", $udfort);
            $endag = 24 * 60 * 60;
            $paaskedag_to = easter_date($udfort[0])+$endag;
            $skartorsdag = easter_date($udfort[0])-($endag*3);
            $langfredag = easter_date($udfort[0])-(2*$endag);
            $kristi = easter_date($udfort[0])+(39*$endag);
            $pinsedag_to = easter_date($udfort[0])+(50*$endag);
            $bededag = easter_date($udfort[0])+(26*$endag);


            $unixdeadline = mktime(0,0,0, $deadline[1], $deadline[2], $deadline[0]);
            $unixudfort = mktime(0,0,0, $udfort[1], $udfort[2], $udfort[0]);

            if ($unixdeadline == $unixudfort){
                $forskel = "0";
            } elseif ($unixdeadline < $unixudfort){
                $unixforskel = $unixdeadline - $unixudfort;
                $antaldage = round($unixforskel/$endag);
                $fridage=0;

                //Til forløkken
                $nyantaldage = $antaldage *-1;

                for ($i = 1; $i <= $nyantaldage; $i++){
                    $tempdato = $unixdeadline + ($i*$endag);

                    //Mangler stadig datoerne som er indtastet som feriedage

                    //Er det én af de faste helligdage
                    if ( $tempdato == $paaskedag_to || $tempdato == $skartorsdag || $tempdato == $langfredag || $tempdato == $kristi || $tempdato == $pinsedag_to || $tempdato == $bededag){
                        $fridage = $fridage+1;
                    }

                    //Er det en weekend
                    if (date("w", $tempdato) == 0 || date("w", $tempdato) == 6) {
                        $fridage = $fridage+1;
                    }
                }
                $forskel = $antaldage + $fridage;
            } else {

                $unixforskel = $unixdeadline - $unixudfort;
                $antaldage = $unixforskel/$endag;
                $fridage=0;

                for ($i = 1; $i <= $antaldage; $i++){
                    $tempdato = $unixudfort + ($i*$endag);

                    //Mangler stadig datoerne som er indtastet som feriedage

                    //Er det én af de faste helligdage
                    if ( $tempdato == $paaskedag_to || $tempdato == $skartorsdag || $tempdato == $langfredag || $tempdato == $kristi || $tempdato == $pinsedag_to || $tempdato == $bededag){
                        $fridage = $fridage+1;
                    }

                    //Er det en weekend
                    if (date("w", $tempdato) == 0 || date("w", $tempdato) == 6) {
                        $fridage = $fridage+1;
                    }
                }
                $forskel = $antaldage - $fridage;
            }

    }

    return $forskel;

}

    function farve($værdi){
        $farve = "#000000";
        if($værdi<0){
            $farve = "#FF0000";
        }
        return $farve;
    }

    $budget = true;

    // TOTAL STATISTIK
    if (isset($_POST['kvalitet_submit'])) {
        $year = $_POST['afvigelse'];
        list($startdato,$slutdato) = explode("-", $year);
        $startaar = $startdato;
        $slutaar = $slutdato;
        $startdato = $startdato ."-07-01";
        $slutdato = $slutdato ."-07-01";
        $laststartdato = ($startdato-1) . "-07-01";
        $lastslutdato = ($slutdato-1) . "-07-01";
        $titel = "DS Spærsalg";
        $where = "";
        $wherebudget = "";

        $kvartal = $_POST['afvigelse_kvartal'];
        list($aaret, $slutmaaned, $startmaaned) = explode("-", $kvartal);
        list($startaar, $slutaar) = explode("-", $_POST['afvigelse']);

        $start = $startmaaned;
        $slut = $slutmaaned;

        if ($start == 1){
            $kvarbe = "kvartalsregnskabet januar-marts i regnskabsåret";
            $aar = $slutaar;
        } else if ($start == 4){
            $kvarbe = "kvartalsregnskabet april-juni i regnskabsåret";
            $aar = $slutaar;
        } else if ($start == 7){
            $kvarbe = "kvartalsregnskabet juli-september i regnskabsåret";
            $aar = $startaar;
        } else if ($start == 10){
            $kvarbe = "kvartalsregnskabet oktober-december i regnskabsåret";
            $aar = $startaar;
        } else {
            $kvarbe = "regnskabsåret";
        }

    }

$mis = "

SELECT o.ordre, MONTH(o5.r572a), YEAR(o5.r572a), r583, r527 AS id, r9 AS kunde, WEEK(r530c, 3) AS r530c,  r530c AS deadline_r530c, WEEK(r542a, 3) AS r542a,
    r542a AS udfort_r542a, datediff(r530c, r542a) AS statik, WEEK(r577, 3) AS r577, r577 AS deadline_r577, r543a AS udfort_r543a,
    WEEK(r543a, 3) AS r543a, datediff(r577, r543a) AS optegning, WEEK(r532c, 3) AS r532c, WEEK(r547a, 3) AS r547a, datediff(r532c, r547a) AS prodtegn,
    WEEK(r544a, 3) AS r544a, datediff(r532c, r544a) AS kundegod, WEEK(r533d, 3) AS r533d, WEEK(r550a, 3) AS r550a, datediff(r533d, r550a) AS levering,
    r555
    FROM (ordre AS o LEFT JOIN ordre0 AS o0 ON o.id = o0.tilbudsnummer)
        LEFT JOIN ordre5 AS o5 ON o0.tilbudsnummer = o5.tilbudsnummer
    WHERE MONTH(o5.r572a) >= '$start' && MONTH(o5.r572a) <= '$slut' && YEAR(o5.r572a) = '$aar' && o5.r575a != 1 ORDER BY ordre ASC
";


$tip = mysql_query($mis);
?>
<html>
<head>
<link href="css_kvalitetsmaling.css" rel="stylesheet" type="text/css">
<title>Deadline afvigelse på ordre for <?php echo $titel; ?></title>
</head>
<body>
<h1>Deadline afvigelse på ordre for <?php echo $titel; ?></h1>
<h2>for <?php echo $kvarbe . " ". $year; ?></h2>
<form>
<table border="1" cellspacing="0">
    <tr>
        <td rowspan="2" valign="top">
            <strong>Ordrenr</strong>
        </td>
        <td rowspan="2" width="15%" valign="top" align="center" valign="top">
            <strong>Kunde</strong>
        </td>
        <td rowspan="2" width="5%" valign="top" align="center" valign="top">
            <strong>Dl. ændr.</strong>
        </td>
        <td colspan="3" align="center" valign="top">
            <strong>Klar til statik</strong>
        </td>

        <td colspan="3" align="center" valign="top" width="13%">
            <strong>Klar til optegning</strong>
        </td>
        <td colspan="3" align="center" valign="top" width="13%">
            <strong>Prod.tegn sendt til godkendelse</strong>
        </td>
        <td colspan="3" align="center" valign="top" width="13%">
            <strong>Tegninger godk. af kunde</strong>
        </td>
        <td colspan="3" align="center" valign="top" width="13%">
            <strong>Levering</strong>
        </td>
        <td rowspan="2" width="5%" align="center" valign="top">
            <strong>Lev.-uge tegn.-sæt</strong>
        </td>
    </tr>

    <tr>

        <td align="center" width="6%">
            <strong>opr.</strong>
        </td>
        <td align="center" width="6%">
            <strong>udført</strong>
        </td>
        <td align="center">
            <strong>over.</strong>
        </td>
        <td align="center" width="6%">
            <strong>opr.</strong>
        </td>
        <td align="center" width="6%">
            <strong>udført</strong>
        </td>
        <td align="center">
            <strong>over.</strong>
        </td>
        <td align="center" width="6%">
            <strong>opr.</strong>
        </td>
        <td align="center" width="6%">
            <strong>udført</strong>
        </td>
        <td align="center">
            <strong>over.</strong>
        </td>
        <td align="center" width="6%">
            <strong>opr.</strong>
        </td>
        <td align="center" width="6%">
            <strong>udført</strong>
        </td>
        <td align="center">
            <strong>over.</strong>
        </td>
        <td align="center" width="6%">
            <strong>opr.</strong>
        </td>
        <td align="center" width="6%">
            <strong>udført</strong>
        </td>
        <td align="center">
            <strong>over.</strong>
        </td>
    </tr>
<?php
while ($række = mysql_fetch_array($tip)) {?>

    <tr>
        <td>
            <?php echo $række[ordre];?>
        </td>
        <td>
            <?php echo $række[kunde];?>
        </td>
        <td align="center">
            <?php if ($række[r583]==2){
                echo "*";
            }
            ?>
        </td>
        <td align="center">
            <?php echo $række[r530c];?>
        </td>
        <td align="center">
            <?php echo $række[r542a];?>
        </td>
        <td align="center">
            <?php
                if ($række[r530c] != "0000-00-00" && $række[r542a] != "0000-00-00") {
//                    echo $række[statik];
                    echo find_arbejdsdage($række[deadline_r530c], $række[udfort_r542a], $række[statik]);
                }?>
        </td>
        <td align="center">
<!--            <?php echo $række[r531c];?>-->
<!--            <?php echo $række[r577];?>-->
            <?php echo $række[deadline_r577];?>
        </td>
        <td align="center">
<!--            <?php echo $række[r543a];?>-->
            <?php echo $række[udfort_r543a];?>
        </td>
        <td align="center">
            <?php
                //if ($række[deadline_r577] != "0000-00-00" && $række[udfort_r543a] != "0000-00-00") {
                    //echo $række[optegning];
                    echo find_arbejdsdage($række[deadline_r577], $række[udfort_r543a], $række[optegning]);
                //}?>
        </td>
        <td align="center">
            <?php echo $række[r532c];?>
        </td>
        <td align="center">
            <?php echo $række[r547a];?>
        </td>
        <td align="center">
            <?php
                if ($række[r532c] != "0000-00-00" && $række[r547a] != "0000-00-00") {
                    echo $række[prodtegn];
                }?>
        </td>
        <td align="center">
            <?php echo $række[r532c];?>
        </td>
        <td align="center">
            <?php echo $række[r544a];?>
        </td>
        <td align="center">
            <?php
                if ($række[r532c] != "0000-00-00" && $række[r544a] != "0000-00-00") {
                    echo $række[kundegod];
                }?>
        </td>
        <td align="center">
            <?php echo $række[r533d];?>
        </td>
        <td align="center">
            <?php echo $række[r550a];?>
        </td>
        <td align="center">
            <?php
                if ($række[r533d] != "0000-00-00" && $række[r550a] != "0000-00-00") {
                    echo $række[levering];
                }?>
        </td>
        <td align="center">
            <?php echo $række[r555];?>
        </td>
    </tr>
<?php } ?>
</table>


</form>
<p>
<input type="button" onClick="window.print();" value="Print">
</p>
</body>
Avatar billede showsource Seniormester
06. februar 2007 - 07:16 #21
Cannot redeclare make_array() => make_array() er defineret tidligere i din.
Du kan ikke ha' to funktioner med samme navn.

Og hvorfor jeg ikke har forklaret det med dit år => Well, kan ikke/orker ikke at finde ud af det!
Avatar billede lsskaarup Nybegynder
06. februar 2007 - 19:48 #22
Det kan jeg bare ikke forstå mener ikke at have defineret make_array tidligere, men skal da lige have tjekket include siderne.
Avatar billede lsskaarup Nybegynder
16. februar 2007 - 13:30 #23
Jeg har selv løst det hele, ved at videre udbygge min kode
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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