php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2009

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 06.04.2009, 11:03  
Erfahrener Benutzer
 
Registriert seit: 17.01.2009
Beiträge: 150
Curcio kann nur auf Besserung hoffen
Standard [Erledigt] Werktage zu einem Datum addieren

Hallo,
ich möchte zu einem Datum eine bestimme Anzahl von Tagen addieren.
Jedoch sollen nur Werktage addiert werden. (Mo-Fr).
Das addierte Datum möchte ich anschließend ausgeben.
Ich habe schon viel in der Doku rumgesucht und auch in Foren, finde aber
nichts.
Das Datumsformat ist momentan: date("d.m.Y") also 06.04.2009 für heute.

Danke!
__________________
..[.}}.°.°.{{.]..
Curcio ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 06.04.2009, 11:17  
Erfahrener Benutzer
 
Benutzerbild von Felix
 
Registriert seit: 17.06.2008
Beiträge: 184
Felix befindet sich auf einem aufstrebenden Ast
Standard

könntest du ein Beispiel geben?

ist 06.04. + 14 Tage
= 20.04.(alle Tage) oder
= 24.04.(Werktage) oder
= 28.04.(Werktage ohne Feiertage)
__________________
Wer Rechtschreibefehler in meinen Beiträgen findet,
der darf sie gerne behalten/tauschen/bei ebay versteigern...
Felix ist offline  
Alt 06.04.2009, 11:44  
Erfahrener Benutzer
 
Registriert seit: 17.01.2009
Beiträge: 150
Curcio kann nur auf Besserung hoffen
Standard

Also ich denke es soll schon mit Feiertagen sein,
will aber erstmal alles hinkriegen nur mit Werktagen ohne Berücksichtigung
von Feiertagen.

PHP-Code:
function werktageAddieren($addTage)
{
    
$datumheute time();
    
$tag getdate();
    if(
$tag['wday'] > && $tag['wday'] < 6)
    {
        
//Werktag
        
$datumheute $datumheute mktime(0,0,0,0,$addTage,0);
    }
    else
    {
        
//Kein Werktag
        
if($tag['wday'] == 0)
        {
            
//Sonntag (Time +1)
            
$addTage $addTage +1
            
$datumheute $datumheute mktime(0,0,0,0,$addTage,0);
            

        }
        else
        {
            
//Samstag (Time +2)
            
$addTage $addTage +2;
            
$datumheute $datumheute mktime(0,0,0,0,$addTage,0);

        }
    }
    
$datumheute date("d.m.Y",$datumheute);
    return 
$datumheute;

Das habe ich schon versucht aber das addieren mit mktime klappt noch nicht.
__________________
..[.}}.°.°.{{.]..
Curcio ist offline  
Alt 06.04.2009, 12:24  
Erfahrener Benutzer
 
Benutzerbild von Felix
 
Registriert seit: 17.06.2008
Beiträge: 184
Felix befindet sich auf einem aufstrebenden Ast
Standard

ein Tag sind 86400 Sekunden ...also anstelle von
PHP-Code:
$datumheute $datumheute mktime(0,0,0,0,$addTage,0); 
kannst du auch
PHP-Code:
 $datumheute $datumheute + ($addTage*86400); 
schreiben ... wenn das deine Frage war...


aber ich verstehe nicht ganz was das soll. weil in deinem Script überprüfst du ja nur ob das Startdatum ein Wochenende ist und nicht wieviele Wochenenden beim Plusrechnen übergangen werden müssen...
So wie ich deine Frage verstanden habe geht es doch viel eher darum das von einem bestimmten datum ausWerktage hinzugerechnet werden sollen und damit ein reales Datum dabei rauskommt müssen immer wenn ein Wochenende kommt zwei Tage hinzugerechnet werden? oder?
__________________
Wer Rechtschreibefehler in meinen Beiträgen findet,
der darf sie gerne behalten/tauschen/bei ebay versteigern...
Felix ist offline  
Alt 06.04.2009, 13:37  
Erfahrener Benutzer
 
Registriert seit: 17.01.2009
Beiträge: 150
Curcio kann nur auf Besserung hoffen
Standard

Meine neue Funktion sieht so aus:
PHP-Code:
function werktageAddieren($addTage)
{
    
$datumheute time();
    
$zeitpunkt $datumheute 86400;
    
$tag getdate($zeitpunkt);

    if(
$tag['weekday'] == "Saturday")
    {
        
$zeitpunkt 86400*2;
    }
    if(
$tag['weekday'] == "Sunday")
    {
        
$zeitpunkt 86400;
    }

    
    for (
$i 1$i $addTage$i++)
    {
        
$tag getdate($zeitpunkt);
        
$zeitpunkt $zeitpunkt 86400;
        if(
$tag['weekday'] == "Saturday")
        {
            
$zeitpunkt $zeitpunkt 86400 *2;
        }


        if(
$tag['weekday'] == "Sunday")
        {
            
$zeitpunkt $zeitpunkt 86400;
        }

    }
    
$zeitpunkt date("d.m.Y",$zeitpunkt);
    return 
$zeitpunkt;

Verrechnet sich aber noch irgendwo, wo genau konnte ich noch nicht
feststellen.
__________________
..[.}}.°.°.{{.]..
Curcio ist offline  
Alt 06.04.2009, 13:45  
Moderator
 
Benutzerbild von Asipak
 
Registriert seit: 18.07.2005
Beiträge: 4.072
Asipak sorgt für eine eindrucksvolle AtmosphäreAsipak sorgt für eine eindrucksvolle Atmosphäre
Standard

was soll rauskommen und was erhälst du? Beispiel?
Asipak ist offline  
Alt 06.04.2009, 13:57  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Curcio Beitrag anzeigen
Verrechnet sich aber noch irgendwo, wo genau konnte ich noch nicht feststellen.
Na ja, sehr klare Aussage.
Verrechnet sich nicht irgendwo, sondern fast überall.
  1. Den heutigen Tag musst du nicht dazuzählen, also setze $zeitpunkt am Anfang auf time()
  2. Deshalb brauchst du auch den ersten Teil nicht
  3. Sowohl bei Samstag, also auch beim Sonntag wird ein zusätzlicher Tag dazugezählt
  4. Die Umwandlung in Sekunden kannst dau auf den Schluss aufsparen
Das könnte dann etwa so aussehen:
PHP-Code:
function werktageAddieren($addTage){
    
$zeitpunkt time();
    for (
$i 1$i $addTage$i++){
        
$tag getdate($zeitpunkt);
        
$zeitpunkt ++;
        if(
$tag['weekday'] == "Saturday" || $tag['weekday'] == "Sunday"){
            
$zeitpunkt ++;
        }
    }
    
$zeitpunkt date("d.m.Y"$zeitpunkt 86400);
    return 
$zeitpunkt;

__________________
Gruss
L

Geändert von lazydog (06.04.2009 um 15:30 Uhr). Grund: Falsche Startzeit
lazydog ist offline  
Alt 06.04.2009, 14:48  
Erfahrener Benutzer
 
Benutzerbild von Andreas
 
Registriert seit: 22.04.2005
Beiträge: 391
Andreas ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hier mal meine Version, mit "DEBUG-Ausgabe", um es zu verstehen.

PHP-Code:
function werktageAddieren($addTage$zeitpunkt=null) {
    
// Warum auch immer du erst ab morgen rechnest...
    
if(is_null($zeitpunkt))
        
$zeitpunkt time();// $zeitpunkt = strtotime("+1 day");
    
    
while($addTage 0) {
        
$zeitpunkt += 86400;
        
        
$day = (int)date("w"$zeitpunkt);
        
        if(
in_array($day, array(0,6))) {
            echo 
"SKIP: ".date("l  d.m.Y"$zeitpunkt)."\n";
            continue;
        }
        echo 
"USE:  ".date("l  d.m.Y"$zeitpunkt)."\n";    
        
$addTage--;
    }
    

    return 
$zeitpunkt;
}

echo 
date("d.m.Y"werktageAddieren(10)); 
Andreas ist offline  
Alt 06.04.2009, 15:35  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

@Andreas
Das ist zwar das, was der Titel beschreibt; was er aber offensichtlich will, ist das Datum x Arbeitstage später. Deshalb muss er die WE-Tage nicht überspringen, sondern ebenfalls (zusätzlich) dazuzählen.
__________________
Gruss
L
lazydog ist offline  
Alt 06.04.2009, 15:54  
Erfahrener Benutzer
 
Benutzerbild von Felix
 
Registriert seit: 17.06.2008
Beiträge: 184
Felix befindet sich auf einem aufstrebenden Ast
Standard

wen es intressiert ... ich hab hier noch ne Funktion rumliegen die zu einem Datum Werktage hinzurechnet.
keine Garantie!
PHP-Code:
function plusWerktag($date,$days) {
    
//Wochentagnummer
    
$wD date("w",$date);
    
//neu nummerieren damit Montag 0 ist und das Wochenende bei 5 beginnt
    
if($wD == 0) { $wD 6; } else { $wD $wD-1;}
    
//Ist das Startdatum im Wochenende?
    
if($wD != and $wD != 6) {
        
// $pD <= Tage die dazu zuzählen sind
        
$pD 0;
        
// liegt das Ergebnis im oder hinter einem Wochenende
        
if(($wD+$days) >= 5) {
            
// wieviele Wochenenden liegen dazwischen? -> anzahl der Wochenendtage auf $pD legen
            
$pD ceil(($wD+$days)/7)*2;
            
$zD $pD;
            
//sollten durch die hinzugefügten Tage weitere Wochenenden übergangen werden
            
while($zD >= 5) {
                
$zD ceil(($zD-5)/7)*2;
                
$pD $pD+$zD;
            }
        }
        
//neues Datum berechnen
        
$nD $date + (($days+$pD)*86400);
        
//return!
        
return $nD;
    } else {
        
//Fehler Startdatum ist kein Wochentag!
        //hier sollte man eine gescheitere Lösung bauen!
        
die('das Start Datum ist kein Werktag');
    }

__________________
Wer Rechtschreibefehler in meinen Beiträgen findet,
der darf sie gerne behalten/tauschen/bei ebay versteigern...
Felix ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine 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
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Bei Abfrage nur neuestes Datum auswählen alexh PHP Tipps 2008 16 22.09.2008 17:43
[Erledigt] Datensätze nach Datum sortieren und nächstes Datum ausgeben kinerdar Datenbanken 2 12.09.2008 12:00
[Erledigt] Datums Foumulareingabe mit Datebankeintrag Datum vergleichen freakymiky PHP Tipps 2008 1 21.06.2008 15:49
Auf irgendein Datum einen Tag dazu addieren Cheesy PHP Tipps 2008 10 12.11.2007 20:51
RSS Feed zeigt kein richtiges Datum an tayke PHP Tipps 2008 5 24.08.2007 20:05
Jahrestag ermitteln cyberholic PHP Tipps 2006 4 17.12.2006 12:50
näherstes datum zum aktuellen datum herausfinden flflfl Datenbanken 7 01.05.2006 16:57
wie sortiert man Datum bei SQL Abfrage? rockinchina PHP Tipps 2005-2 8 27.09.2005 12:57
Daten aus MYSQL nach Datum filtern Datenbanken 3 19.09.2005 16:09
[Erledigt] datum in mysql datenbank! Datenbanken 7 09.07.2005 14:43
datum auslesen eintragen PHP Tipps 2005 23 13.04.2005 20:39
Zeiten + Datum addieren? PHP Tipps 2005 16 31.03.2005 08:39
Datum in die DB schreiben maximus PHP Tipps 2005 2 09.02.2005 03:35
Datum und Zeit PHP Tipps 2004-2 5 11.12.2004 23:53
Problem mit Datum ?! Datenbanken 21 04.08.2004 16:35

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php datum addieren, php werktage, php werktage addieren, php datum 1 tag hizufügen, php werktag, datum addieren php, php date addieren, sql werktage addieren, php nur werktage, php datum werktage, sql werktage, http://www.php.de/php-einsteiger/53820-erledigt-werktage-zu-einem-datum-addieren.html, werktage sql, werktage php, php tage zu datum addieren, php date werktage, datum werktage, mysql werktage, javascript datum addieren, php werktage zählen

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




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum