Dobrodošli, goste ( Prijava | Registracija )

 
Reply to this topicStart new topic

izracunavanje radnih dana u mesecu, kako izracunati koliko mesec ima TACNO radnih dana

V
millann
poruka Aug 29 2007, 13:35
Poruka #1




Grupa: Članovi
Poruke: 789
Datum reg.: 26-October 06
Lokacija: Beograd
Član broj: 6,983



kako mogu izracunam TACAN podatak koliko ima radinih dana u svakom mesecu.
primer:

radna nedelja traje 5 dana. avgust ima 31 dan a 23 radna dana. jul ima takodje 31 dan a 22 radna. kako mogu da racunam radne dane? potrebno mi je za svaki mesec za sledecih, recimo 5 godina.

svaka ideja mi je dobro dosla

hvala
Go to the top of the page
 
+Quote Post
kazil
poruka Aug 29 2007, 19:48
Poruka #2




Grupa: Članovi 1
Poruke: 30
Datum reg.: 26-July 07
Član broj: 12,706



moglo bi se lako napraviti da nije svake godine za svaki mesec razlicito.

kod date() funckije u PHP-u imas kod ispisa da ti ispisuje i ime dana. napravis skript koji ti pici kroz ceo mesec date godine, recimo jun 2008-e, pa kad nije subota ili nedelja onda $promenljiva + 1, a ako jeste onda nista.

vidis, dade mi dobru ideju za zanimaciju smile.gif ae videcu ovo veceras, pa javljam sutra smile.gif
Go to the top of the page
 
+Quote Post
MrSteel
poruka Aug 29 2007, 20:08
Poruka #3




Grupa: Članovi 1
Poruke: 2,670
Datum reg.: 5-February 06
Lokacija: nozomu-tokyo
Član broj: 3,250



uzmi cele nedelje (broj dana / 7) * 5 + radni dani ostatka (onaj deo koji ti ostane van celih nedelja pa vidis koji su tu radni dani)
Go to the top of the page
 
+Quote Post
kazil
poruka Aug 29 2007, 20:47
Poruka #4




Grupa: Članovi 1
Poruke: 30
Datum reg.: 26-July 07
Član broj: 12,706



vidju:

CODE
<?php

$od_godine = 2007; // od koje godine da racuna

$do_godine = 2011; // do koje godine da racuna

for($od_godine = $od_godine;$od_godine<=$do_godine;$od_godine++){ // glavna for petlja, petlja za godine

    $od_meseca = 1; // od kog meseca u godini da racuna
    
    $do_meseca = 12; // do kog meseca u godini da racuna

    $prestupna = date(L,mktime(0,0,0,1,1,$od_godine)); // proverava da li je data godina prestupna, 'L' je za to
    
    for($od_meseca = $od_meseca;$od_meseca<=$do_meseca;$od_meseca++){ // for petlja za mesece
    
        $broj_radnih_dana = 0; // za trenutni mesec nuliramo broj radnih dana

        // sledeca if...elseif...else... petlja gleda koji je mesec i na osnovu toga odlucuje koliko ima dana u mesecu
        
        if($od_meseca == 1 or $od_meseca == 3 or $od_meseca == 5 or $od_meseca == 7 or $od_meseca == 8 or $od_meseca == 10 or $od_meseca == 12){
    
            // ovo je za mesece koji imaju 31 dan
            
            $broj_dana_u_mesecu = 31;

        }
        
        elseif ($od_meseca == 4 or $od_meseca == 6 or $od_meseca == 9 or $od_meseca == 11){

            // ovo je za mesece koji imaju 30 dana
            
            $broj_dana_u_mesecu = 30;
        
        }
        
        elseif ($prestupna == 1){
        
            // ako je prestupna godina
            
            $broj_dana_u_mesecu = 29;
    
        }
    
        else {
        
            // ako nije prestupna godina
            
            $broj_dana_u_mesecu = 28;
                
        }
        
        $dan_u_mesecu = 1; // pocetna vrednost za dan u mesecu, svaki mesec krece od prvog

        for($dan_u_mesecu=1;$dan_u_mesecu<=$broj_dana_u_mesecu;$dan_u_mesecu++){ // for petlja za dane u mesecu

            $date_temp = mktime(0,0,0,$od_meseca,$dan_u_mesecu,$od_godine); // pravi timestamp
            
            $dan = date(l,$date_temp); // iz timestamp-a pravi datum, samo ime dana u mesecu (Monday, Tuesday...)
        
            $godina = date(Y,$date_temp); // iz timestamp-a pravi datum, samo godina
        
            $mesec = date(F,$date_temp); // iz timestamp-a pravi datum, samo ime meseca
        
            if($dan != 'Sunday' and $dan != 'Saturday'){ // ovde proverava da li je radni dan ili vikend, ako nije ni suboti ni nedelja, broj radnih dana povecava za 1
    
                $broj_radnih_dana = $broj_radnih_dana + 1;
            
            }    

        }
        
        // za svaki mesec svake godine ispisuje koliko ima radnih dana
        
        echo "U $godina godini, $mesec mesec ima $broj_radnih_dana radna dana<br />";
        
    }

}

?>


snimi pod koji god fajlom i samo pokreni smile.gif

jedino ne racuna za praznike. ako ti treba i za praznike, nadji mi negde koji je praznik kada, ubacicu i to.
Go to the top of the page
 
+Quote Post
millann
poruka Aug 29 2007, 20:56
Poruka #5




Grupa: Članovi
Poruke: 789
Datum reg.: 26-October 06
Lokacija: Beograd
Član broj: 6,983



kul stvarno.. super je ovo, svidja mi se.. resio sam problem danas, ali cu mozda koristiti ovaj, videcu

sto se tice resenja problema, nasao sam funkciju na netu. ova racuna i praznike.. pa kome treba, izvolte..

CODE
<?
function date_difference($start_date, $end_date, $workdays_only = false, $skip_holidays = false){
    $start_date = strtotime($start_date);
    $end_date = strtotime($end_date);
    $seconds_in_a_day = 86400;
    $sunday_val = "0";
    $saturday_val = "6";
    $workday_counter = 0;
    $holiday_array = array();
    
    $ptr_year = intval(date("Y", $start_date));
    $holiday_array[$ptr_year] = getHolidays(date("Y", $start_date));

    for($day_val = $start_date; $day_val <= $end_date; $day_val+=$seconds_in_a_day){
        $pointer_day = date("w", $day_val);
        if($workdays_only == true){
            if(($pointer_day != $sunday_val) AND ($pointer_day != $saturday_val)){
                if($skip_holidays == true){
                    if(intval(date("Y", $day_val))!=$ptr_year){
                        $ptr_year = intval(date("Y", $day_val));
                        $holiday_array[$ptr_year] = getHolidays(date("Y", $day_val));
                    }
                    if(!in_array($day_val, $holiday_array[date("Y", $day_val)])){
                        $workday_counter++;    
                    }
                }else{
                    $workday_counter++;    
                }
            }
        }else{
                if($skip_holidays == true){
                    if(intval(date("Y", $day_val))!=$ptr_year){
                        $ptr_year = intval(date("Y", $day_val));
                        $holiday_array[$ptr_year] = getHolidays(date("Y", $day_val));
                    }
                    if(!in_array($day_val, $holiday_array[date("Y", $day_val)])){
                        $workday_counter++;    
                    }
                }else{
                    $workday_counter++;    
                }
        }
    }
    return $workday_counter;
}

/*--------------------------------------------------------------
The following code is a modified version of heymeadows' zend script submitted on 11/06/2001

CHANGE LOG
2004-07-28 - removed date category numbers
2004-07-28 - renamed function GetNextHoliday to getHolidays
2004-07-28 - moved holiday class outside function
2004-07-28 - modified structure & return value of getHolidays function
2004-07-28 - added memorial_day function to return the timestamp of memorial day of the given year
    
--------------------------------------------------------------*/
function GetTimeStamp($MySqlDate){
  /*
  Take a date in yyyy-mm-dd format and return it to the user in a PHP timestamp
  Robin 06/10/1999
  */
    
  $date_array = explode("-",$MySqlDate); // split the array
    
  $var_year = $date_array[0];
  $var_month = $date_array[1];
  $var_day = $date_array[2];

  $var_timestamp = mktime(0,0,0,$var_month,$var_day,$var_year);
  return($var_timestamp); // return it to the user
}  // End function GetTimeStamp()

function ordinalDay($ord, $day, $month, $year)
    // ordinalDay returns date of the $ord $day of $month.
    // For example ordinalDay(3, 'Sun', 5, 2001) returns the
    // date of the 3rd Sunday of May (ie. Mother's Day).
    //
    // Note: $day must be the 3 char abbr. for the day, as
    //       given by date("D");
    //
    // By: heymeadows@yahoo.com
    
    {
    $firstOfMonth = GetTimeStamp("$year-$month-01");
    $lastOfMonth  = $firstOfMonth + date("t", $firstOfMonth) * 86400;
    $dayOccurs = 0;
    
    for ($i = $firstOfMonth; $i < $lastOfMonth; $i += 86400){
        if (date("D", $i) == $day){
            $dayOccurs++;
            if ($dayOccurs == $ord){
                $ordDay = $i;
            }
        }
    }
    return $ordDay;
}  // End function ordinalDay()

function memorial_day($inc_year){
    for($date_stepper = intval(date("t", strtotime("$inc_year-05-01"))); $date_stepper >= 1; $date_stepper--){
        if(date("l", strtotime("$inc_year-05-$date_stepper"))=="Monday"){
            return strtotime("$inc_year-05-$date_stepper");
            break;    
        }    
    }
}


// Looks through a lists of defined holidays and tells you which
// one is coming up next.
//
// By: heymeadows@yahoo.com
function getHolidays($inc_year){
    //$year = date("Y");
    $year = $inc_year;
    
    $holidays[] = new holiday("New Year's Day", GetTimeStamp("$year-1-1"));
    $holidays[] = new holiday("Birthday of Martin Luther King", ordinalDay(3, 'Mon', 1, $year));
    $holidays[] = new holiday("Groundhog Day", GetTimeStamp("$year-2-2"));
    $holidays[] = new holiday("Valentine's Day", GetTimeStamp("$year-2-14"));
    $holidays[] = new holiday("St. Patrick's Day", GetTimeStamp("$year-3-17"));
    $holidays[] = new holiday("Easter", easter_date($year));
    $holidays[] = new holiday("Memorial Day", memorial_day($year));
    $holidays[] = new holiday("Mother's Day", ordinalDay(2, 'Sun', 5, $year));
    $holidays[] = new holiday("Father's Day", ordinalDay(3, 'Sun', 6, $year));
    $holidays[] = new holiday("Independence Day", GetTimeStamp("$year-7-4"));
    $holidays[] = new holiday("Labor Day", ordinalDay(1, 'Mon', 9, $year));
    $holidays[] = new holiday("Thanksgiving Day", ordinalDay(4, 'Thu', 11, $year));
    $holidays[] = new holiday("Christmas", GetTimeStamp("$year-12-25"));
    
    $numHolidays = count($holidays) - 1;
    $out_array = array();
    
    for ($i = 0; $i < $numHolidays; $i++){
            $out_array[] = $holidays[$i]->date;
    }
    unset($holidays);
    return $out_array;
} // end function getHolidays

class holiday{
    var $name;
    var $date;

    // Contructor to define the details of each holiday as it is created.
    function holiday($name, $date){
        $this->name   = $name;   // Official name of holiday
        $this->date   = $date;   // UNIX timestamp of date
    }
} // end class holiday
?>
Go to the top of the page
 
+Quote Post
kazil
poruka Aug 29 2007, 21:14
Poruka #6




Grupa: Članovi 1
Poruke: 30
Datum reg.: 26-July 07
Član broj: 12,706



ih dobro je i ovo... samo kod nas nema St. Patrick`s Day biggrin.gif

samo se nadam da ce ti biti od pomoci smile.gif meni dobro doslo da malo pokrenem mozak smile.gif
Go to the top of the page
 
+Quote Post
millann
poruka Aug 29 2007, 21:38
Poruka #7




Grupa: Članovi
Poruke: 789
Datum reg.: 26-October 06
Lokacija: Beograd
Član broj: 6,983



promenis u neki drugi dan smile.gif

videcu jos koje cu racunanje da koristim. tvoje mi je nekako sigurnije.. bolje ga razumem smile.gif
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic

 



Lo-fi verzija Trenutno vreme: Saturday 20. September 2014 - 10:56

Sve informacije (poruke, teme i sl.) predstavljaju stavove samo njihovih autora.
Objavljivanje informacija sa sajta u nekomercijalne svrhe moguće je samo uz navođenje URL adrese diskusije.
Za sve druge vidove distribucije potrebno je imati izričitu dozvolu administratora Dizajn Zone i/ili autora poruka.
Autorska prava za sadržaj poruke zadržava njihov autor, osim ako nije drugačije naznačeno.

powered by:Plus hosting