php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #16 (permalink)  
Alt 13-12-2006, 12:25
m-werk
 Registrierter Benutzer
Links : Onlinestatus : m-werk ist offline
Registriert seit: Jan 2006
Beiträge: 168
m-werk ist zur Zeit noch ein unbeschriebenes Blatt
Standard

so, hab es nun in eine while - schleife gesetzt.

PHP-Code:
$startdatum=mktime(0,0,0,$Monat,$Tag,$Jahr);
$enddatum=mktime(0,0,0,$MonatEnde,$TagEnde,$JahrEnde);

while(
$startdatum<=$enddatum){
  
$startdatum++;
  
$test=date("d.m.Y"$startdatum);
  echo 
"$test<br>";

Wenn ich jetzt über das ganze mal nachdenke, fällt mir jetzt noch was dazu ein:

mit folgender funktion lese ich ja die Tage eines Monats heraus:
PHP-Code:
function ArbeitstageErmitteln($Jahr$Monat$Tag$JahrEnde$MonatEnde$TagEnde)

  for(
$i=1$i<=date("t"mktime(000$Monat$Tag$Jahr)); $i++)
    {
    if(
date("w"mktime(000$Monat$i$Jahr))!=&& date("w"mktime(000$Monat$i$Jahr))!=6)
      {
      
$Anzahl++;
      }
    }
  return 
$Anzahl;

So, nun habe ich einen ganz anderen DENK-ANSATZ.

Grund dafür ist, dass ich die Werktage eines Ausgewählten Zeitraumes benötige. Diesen Code habe ich mir jetzt zusammengestellt.

PHP-Code:
$startdatum=mktime(0,0,0,$Monat,$Tag,$Jahr);
$enddatum=mktime(0,0,0,$MonatEnde,$TagEnde,$JahrEnde);

$start_wday date('w',$startdatum);
$end_wday date('w',$enddatum);

$weeks date('W',$enddatum $startdatum);
$days date('z',$enddatum $startdatum);

if(
$start_wday $end_wday) { 
  
$w_days $days - ($weeks 2);
}
else 
$w_days $days - (($weeks 1) * 2);

//----- FEIERTAGE -----
$faktor=0;
while(
true)
{
 if((
$startdatum+(86400*$faktor))>$enddatum)
 {
  break;
 }
 else
 {
  foreach(
$feiertage as $feiertag)
  {
   
$feiertag=explode(".",$feiertag);
   
$feiertag mktime(0,0,0,$feiertag[1],$feiertag[0],$feiertag[2]);
   if((
$startdatum+(86400*$faktor))==$feiertag)
   {
    if(
date("l" ,$feiertag)!="Sunday" && date("l" ,$feiertag)!="Saturday")
    {
    
$w_days--;
    }
   }
  }
  
$faktor++;
 }
}
echo 
"$w_days<br>"
So, ich bekomme jetzt anhand diesen codes einen Wert von 255 heraus.
Es müsste aber 248 sein.
WARUM

Es gibt 260 Werktage. (abzüglich Wochenende)
Wir haben 18 Urlaubstage im Jahr (Österreich)
Davon sind genau 6 Urlaubstag im Jahr 2006, die in ein Wochenende fallen.
12 Urlaubstage sind fürs Jahr 2006 unter der Woche.

Somit müssten die 12 Urlaubstage von den 260 Werktagen abgezählt werden.

Ich komm nicht dahinter.

Geändert von m-werk (13-12-2006 um 12:34 Uhr)
Mit Zitat antworten
freelancermap.de - IT Projektvermittlung für Selbständige und Freiberufler
  #17 (permalink)  
Alt 13-12-2006, 15:02
m-werk
 Registrierter Benutzer
Links : Onlinestatus : m-werk ist offline
Registriert seit: Jan 2006
Beiträge: 168
m-werk ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ich kappier das einfach jetzt nicht mehr. Folgender Code funktioniert, wenn ich jeden Monat einzelln abrechnen lasse, richtig. Da stimmt einfach alles.

Wenn ich aber über das ganze Jahr die Berechnung laufen lasse, stimmt der Wert der wirklichen Werktage nicht.

Ich weiss jetzt einfach nicht mehr weiter.
PHP-Code:
<?php
include("feiertage_rechnen.php");
$Jahr=2006;
$Monat=1;
$Tag=1;
$JahrEnde=2006;
$MonatEnde=12;
$TagEnde=31;

$startdatum=mktime(0,0,0,$Monat,$Tag,$Jahr);
$enddatum=mktime(0,0,0,$MonatEnde,$TagEnde,$JahrEnde);

$date1 $Jahr."-".$Monat."-".$Tag;
$date2 $JahrEnde."-".$MonatEnde."-".$TagEnde;

function 
x($date1$date2) {
    
$ts1 strtotime($date1);
    
$ts2 strtotime($date2);
    if(
$ts1 <= || $ts2 <= 0) return false;
    if(
$ts2 $ts1) {
        
$f = -1;
        list(
$ts1$ts2) = array($ts2$ts1);
    }
    else {
        
$f 1;
    }
    
$ts1 mktime(3,0,0,date("m"$ts1),date("d"$ts1), date("Y"$ts1));
    
$ts2 mktime(3,0,0,date("m"$ts2),date("d"$ts2), date("Y"$ts2));
    
$wd 0;
    while(
$ts1 <= $ts2) {
        if( 
date("w"$ts1) != && date("w"$ts1) != $wd++;
        
$ts1 += 86400;
    }
    return 
$f * ($wd );
}
$test=x($date1$date2);
echo 
"$test"." = Tage abzüglich Wochenenden<br>"

//--- Feiertagsberechnung ---
$faktor=0;
while(
true)
{
 if((
$startdatum+(86400*$faktor))>$enddatum)
 {
  break;
 }
 else
 {
  foreach(
$feiertage as $feiertag)
  {
   
$feiertag=explode(".",$feiertag);
   
$feiertag mktime(0,0,0,$feiertag[1],$feiertag[0],$feiertag[2]);
   if((
$startdatum+(86400*$faktor))==$feiertag)
   {
    if(
date("w" ,$feiertag)!=&& date("w" ,$feiertag)!=6)
    {
    
$test--;
    }
   }
  }
  
$faktor++;
 }
}
echo 
"$test"." = Tage abzüglich Feiertage und Wochenenden<br>";
echo 
"$faktor"." = Tage im Monat<br>";
?>
Was stimmt da nicht, ich komm nicht drauf.

Es muss bei dieser datumsangabe bei $test=248 herauskommen. Es kommt aber immer 255 Heraus.

Ich weiss jetzt nicht mehr, was da noch falsch sein kann. Wie gesagt, wenn ich bei den Datumsangaben das Monat für Monat mache, dann stimmt die Berechnung.
Mit Zitat antworten
  #18 (permalink)  
Alt 13-12-2006, 17:53
jmc
 PHP Junior
Links : Onlinestatus : jmc ist offline
Registriert seit: Mar 2006
Beiträge: 868
jmc befindet sich auf einem aufstrebenden Ast
Standard

PHP-Code:
<?
error_reporting
(E_ALL);
/* the dates MUST have the following construction: "01.12.2008" or "1.12.2008"
   examplar: getWorkdays("1.12.2006","17.12.2006",$feiertage);                 */


$feiertage=array("25.12.2006","26.12.2006");
function 
getWorkdays($start$end$holidays){ 
 if(!
preg_match("/^\d{1,2}\.\d{1,2}\.\d{1,4}$/",$start) || 
!
preg_match("/^\d{1,2}\.\d{1,2}\.\d{1,4}$/",$end)){$error=1;}
 if(empty(
$error)){
  
$workdays 0;
  
$start explode(".",$start);
  
$end explode(".",$end);
  
$s_d = (int)$start[0];
  
$s_M = (int)$start[1];
  
$s_y = (int)$start[2];
  
$e_d = (int)$end[0];
  
$e_M = (int)$end[1];
  
$e_y = (int)$end[2];
  
$s_t mktime(3,0,0,$s_M,$s_d,$s_y);
  
$e_t mktime(3,0,0,$e_M,$e_d,$e_y);
  for(
$i=0;$i<count($holidays);$i++){
   
$t_f explode(".",$holidays[$i]);
   
$holidays[$i] = mktime(0,0,0,(int)$t_f[1],(int)$t_f[0],(int)$t_f[2]);
  }
  if(
$s_t<=$e_t){
   for(
$i=0;$i*86400+$s_t<=$e_t;$i++){
    if(!
in_array(date("w",$i*86400+$s_t),array(0,6)) && !in_array($i*86400+$s_t,$holidays)){
     
$workdays++;
    }
   }
   return 
$workdays;
  }else{
   echo 
"invalid input<br>\$start-\$end mustn't be negative";
  }
 }else{
  echo 
"invalid date construction<br>";
 }
}

echo 
getWorkdays("1.1.2006","31.12.2006",$feiertage);
?>
versuchs mal damit.
Die Feiertage habe ich oben definiert di kannst du natürlich auch streichen und mit einem include einfügen.

Geändert von jmc (14-12-2006 um 15:16 Uhr)
Mit Zitat antworten
  #19 (permalink)  
Alt 14-12-2006, 09:53
m-werk
 Registrierter Benutzer
Links : Onlinestatus : m-werk ist offline
Registriert seit: Jan 2006
Beiträge: 168
m-werk ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Danke für den Code, hab alles was $holidays war auf $feiertage ausgebessert. Es kommt aber, wenn ich diesen ausführe, immer die Meldung: invalid date construction

da stimmt noch was nicht oder mach ich was falsch?
Mit Zitat antworten
  #20 (permalink)  
Alt 14-12-2006, 10:02
m-werk
 Registrierter Benutzer
Links : Onlinestatus : m-werk ist offline
Registriert seit: Jan 2006
Beiträge: 168
m-werk ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Naja, vielleicht liegts auch an meiner Feiertags-Datei.

der Code dafür sieht so aus:
PHP-Code:
$Jahr=date("Y");

$neujahr=date("d.m.Y"mktime(0,0,0,1,1,$Jahr));
$h3k=date("d.m.Y"mktime(0,0,0,1,6,$Jahr));
$ostersamstag=date("d.m.Y"mktime(0,0,0,date("m"easter_date($Jahr)),
              
date("d"easter_date($Jahr))-1date("Y"easter_date($Jahr))));
$ostern=date ("d.m.Y"mktime(0,0,0,date("m"easter_date($Jahr)),
        
date("d"easter_date($Jahr)), date("Y"easter_date($Jahr)))); 
$ostermontag=date("d.m.Y"mktime(0,0,0,date("m"easter_date($Jahr)),
             
date("d"easter_date($Jahr))+1date("Y"easter_date($Jahr))));
$christi=date("d.m.Y"mktime(0,0,0,date("m"easter_date($Jahr)),
         
date("d"easter_date($Jahr))+39date("Y"easter_date($Jahr))));
$pfingsts=date("d.m.Y"mktime(0,0,0,date("m"easter_date($Jahr)), 
          
date("d"easter_date($Jahr))+49date("Y"easter_date($Jahr))));
$pfingstm=date("d.m.Y"mktime(0,0,0,date("m"easter_date($Jahr)), 
          
date("d"easter_date($Jahr))+50date("Y"easter_date($Jahr))));
$fronleich=date("d.m.Y"mktime(0,0,0,date("m"easter_date($Jahr)),
           
date("d"easter_date($Jahr))+60date("Y"easter_date($Jahr))));
$staat=date("d.m.Y"mktime(0,0,0,5,1,$Jahr));
$maria=date("d.m.Y"mktime(0,0,0,8,15,$Jahr));
$national=date("d.m.Y"mktime(0,0,0,10,26,$Jahr));
$allerheiligen=date("d.m.Y"mktime(0,0,0,11,1,$Jahr));
$maria2=date("d.m.Y"mktime(0,0,0,12,8,$Jahr));
$heilig=date("d.m.Y"mktime(0,0,0,12,24,$Jahr));
$christ=date("d.m.Y"mktime(0,0,0,12,25,$Jahr));
$stef=date("d.m.Y"mktime(0,0,0,12,26,$Jahr));
$silv=date("d.m.Y"mktime(0,0,0,12,31,$Jahr));

$feiertage=array($neujahr,$h3k,$ostersamstag,$ostern,$ostermontag,$christi,$pfingsts,
$pfingstm,$fronleich,$staat,$maria,$national,$allerheiligen,$maria2,$heilig,
$christ,$stef,$silv); 
Kann es sein, dass ich da einen fehler drinn habe?

EDIT:

hab mir erlaubt, den code nochmals hineinzustellen. hab ihn jetzt auch runtergebrochen so dass er nicht zu breit ist.

Ich hoffe, es passt so


Geändert von m-werk (14-12-2006 um 10:44 Uhr)
Mit Zitat antworten
  #21 (permalink)  
Alt 14-12-2006, 15:15
jmc
 PHP Junior
Links : Onlinestatus : jmc ist offline
Registriert seit: Mar 2006
Beiträge: 868
jmc befindet sich auf einem aufstrebenden Ast
Standard

das geht so nicht... holidays müssen holidays bleiben. Das ist eine Variabel innerhalb der Funktion. Die Feiertage werden durch den Funktionsaufruf übergeben.

Hier nochmals ein Script
PHP-Code:
<?
error_reporting
(E_ALL);
/* the dates MUST have the following construction: "01.12.2008" or "1.12.2008"
   examplar: getWorkdays("1.12.2006","17.12.2006");                            */

function getWorkdays($start$end){
 if(
preg_match("/^\d{1,2}\.\d{1,2}\.\d{1,4}$/",$start) || preg_match("/^\d{1,2}\.\d{1,2}\.\d{1,4}$/",$end)){
  
$workdays 0;
  
$start explode(".",$start);
  
$end explode(".",$end);
  
$s_d = (int)$start[0];
  
$s_M = (int)$start[1];
  
$s_y = (int)$start[2];
  
$e_d = (int)$end[0];
  
$e_M = (int)$end[1];
  
$e_y = (int)$end[2];
  if(
mktime(0,0,0,$s_M,$s_d,$s_y)<=mktime(0,0,0,$e_M,$e_d,$e_y)){
   for(
$i=0;mktime(0,0,0,$s_M,$i+$s_d,$s_y)<=mktime(0,0,0,$e_M,$e_d,$e_y);$i++){
    if(!
in_array(date("w",mktime(0,0,0,$s_M,$i+$s_d,$s_y)),array(0,6)) && 
!
in_array(mktime(0,0,0,$s_M,$i+$s_d,$s_y),get_holidays(mktime(0,0,0,$s_M,$i+$s_d,$s_y)))){
     
$workdays++;
    }
   }
   return 
$workdays;
  }else{
   return 
"invalid input<br>\$start-\$end mustn't be negative";
  }
 }else{
  return 
"invalid date construction<br>";
 }
}
function 
get_holidays($year){
 
$year date("Y",$year);
 
$newyear mktime(0,0,0,1,1,$year);
 
$h3k mktime(0,0,0,1,6,$year);
 
$ostersamstag easter_date($year)-86400;
 
$ostern easter_date($year); 
 
$ostermontag easter_date($year)+86400;
 
$christi easter_date($year)+39*86400;
 
$pfingsts easter_date($year)+49*86400;
 
$pfingstm easter_date($year)+50*86400;
 
$fronleich easter_date($year)+60*86400;
 
$staat mktime(0,0,0,5,1,$year);
 
$maria mktime(0,0,0,8,15,$year);
 
$national mktime(0,0,0,10,26,$year);
 
$allerheiligen mktime(0,0,0,11,1,$year);
 
$maria2 mktime(0,0,0,12,8,$year);
 
$heilig mktime(0,0,0,12,24,$year);
 
$christ mktime(0,0,0,12,25,$year);
 
$stef mktime(0,0,0,12,26,$year);
 
$silv mktime(0,0,0,12,31,$year);

 return array(
$newyear,$h3k,$ostersamstag,$ostern,$ostermontag,$christi,$pfingsts,$pfingstm,
$fronleich,$staat,$maria,$national,$allerheiligen,$maria2,$heilig,$christ,$stef,$silv);
}

echo 
getWorkdays("1.1.2006","31.12.2006"); // Ausgabe 248

?>
PS: Backslashes verschwinden im FOrum. Drücke auf Zitat um den ganzen Code zu erhalten.

Geändert von jmc (14-12-2006 um 15:21 Uhr)
Mit Zitat antworten
  #22 (permalink)  
Alt 14-12-2006, 16:16
m-werk
 Registrierter Benutzer
Links : Onlinestatus : m-werk ist offline
Registriert seit: Jan 2006
Beiträge: 168
m-werk ist zur Zeit noch ein unbeschriebenes Blatt
Thumbs up

SPITZE, GENAU DAS WASS ICH WOLLTE.

DAS FUNKTIONIERT JETZT.


DANKE
Mit Zitat antworten
  #23 (permalink)  
Alt 14-12-2006, 17:05
m-werk
 Registrierter Benutzer
Links : Onlinestatus : m-werk ist offline
Registriert seit: Jan 2006
Beiträge: 168
m-werk ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Eine kleinigkeit brächte ich da noch.

Wie kriege ich jetzt aus der holiday funktion die Tage aufgelistet am Schirm?

hab schon einiges versucht. Komm nicht dahinter.
Mit Zitat antworten
  #24 (permalink)  
Alt 14-12-2006, 17:07
jmc
 PHP Junior
Links : Onlinestatus : jmc ist offline
Registriert seit: Mar 2006
Beiträge: 868
jmc befindet sich auf einem aufstrebenden Ast
Standard

alle freien Tage ausser den Sonntagen und Samstagen, die innerhalb der Zeitspanne sind?
Mit Zitat antworten
  #25 (permalink)  
Alt 14-12-2006, 17:10
m-werk
 Registrierter Benutzer
Links : Onlinestatus : m-werk ist offline
Registriert seit: Jan 2006
Beiträge: 168
m-werk ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ne, ich bräuchte das Datum. ich möchte das datum der einzellnen Feiertage einerseits vom ganzen Jahr sehen und andererseits möchte ich z.b. nur den $silv sehen.
Mit Zitat antworten
  #26 (permalink)  
Alt 14-12-2006, 17:18
jmc
 PHP Junior
Links : Onlinestatus : jmc ist offline
Registriert seit: Mar 2006
Beiträge: 868
jmc befindet sich auf einem aufstrebenden Ast
Standard

PHP-Code:
$array get_holidays(hier_die_jahreszahl);
for(
$i=0;$i<count($array);$i++){
$array[$i] = date("D j F Y",$array[$i])
}
print_r($array); 
um das Datum der einzelnen rauszufinden müsste ich wissen wofür, damit ich etwas so anpassen kann.
Mit Zitat antworten
  #27 (permalink)  
Alt 14-12-2006, 17:23
m-werk
 Registrierter Benutzer
Links : Onlinestatus : m-werk ist offline
Registriert seit: Jan 2006
Beiträge: 168
m-werk ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ich möchte immer das Silvesterdatum auf der Seite angezeigt haben.

Es geht darum:
Ich gebe das Datum ein, wann ein Mitarbeiter in das Unternehmen kommt.

Nun möchte ich immer wissen, wieviele Arbeitstage er bis Jahresende hat.

Ich habe den Code schon so umgebaut, (war nicht viel zu tun, so dass das $start schon mit den richtigen Startdatum, welches ich eingebe, befüllt wird. Ich möchte nicht das Enddatum auch fix hinterlegen, da ich nicht jedes Jahr das Datum ändern möchte.

Darum geht's eigentlich.
Mit Zitat antworten
  #28 (permalink)  
Alt 14-12-2006, 17:26
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Kannst du eigentlich überhaupt irgendwas selber ...?
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #29 (permalink)  
Alt 14-12-2006, 21:30
m-werk
 Registrierter Benutzer
Links : Onlinestatus : m-werk ist offline
Registriert seit: Jan 2006
Beiträge: 168
m-werk ist zur Zeit noch ein unbeschriebenes Blatt
Standard

habs gelöst, danke für eure hilfe und unterstützung.
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

10 Gründe, warum das Todesstern-Projekt gescheitert ist
10 Gründe, warum das Todesstern-Projekt gescheitert istDie Todesstern-Projekte sind spektakulär gescheitert. Lernen Sie von den Fehlern des Imperiums und bewahren Sie Ihre Projekte davor, der dunklen Seite der Macht zu verfallen!

24.11.2020 | Berni

Projektmanagement-Grundlagen Was ist ein PMO?
Projektmanagement-Grundlagen Was ist ein PMO?In unserer Infografik erfahrt ihr es.

02.11.2020 | Berni


 

Aktuelle PHP Scripte

ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script ansehen ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script

Mit unserer Lösungen können Sie nahezu jeden B2B / B2C Marktplatz betreiben den Sie sich vorstellen können. Ganz egal ob Sie einen Automarktplatz, Immobilenportal oder einfach einen Anzeigenmarkt betreiben möchten. Mit ebiz-trader können Sie Ihre Anforder

21.10.2020 Berni | Kategorie: PHP/ Anzeigenmarkt
Sendeplan Script inkl. Wunsch- und Grußbox + Kick-System + Bewerbungssystem

Das professionelle Sendeplan PHP Script inkl. Wunsch- und Grußbox + Kick-System für dein Webradio. Der übersichtliche Sendeplan bietet deinen Moderatoren und Zuhörern die perfekte Übersicht der aktuellen Shows! Du kannst nicht nur Sendungen eintragen, s

20.10.2020 drcomputer | Kategorie: PHP/ Web Radio
Newsmanager 2

Der Newsmanager 2 ist sehr Vielfältig und kann News schreiben, Newsletter versenden und RSS Feeds in einem erzeugen.

20.10.2020 Stephan_1972 | Kategorie: PHP/ News
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 10:17 Uhr.