Beiträge von SinnlosS

    Also bei mir klappt das nicht. Wenn das so einfach wäre... :mrgreen:
    [...]
    -Die Variante mit strtotime erzeugt keine richtige Ausgabe :lol:

    Viele liebe Grüße
    The User


    Bei den beiden Punkten verstehe ich noch nicht ganz was du meinst.

    Ich hatte mir das Testscript hier mal auf die schnelle zusammengeschustert gehabt, da passen alle Ausgaben und Ergebnisse für alle Funktionen:

    War halt nur zum schnellen testen gedacht, nichts schönes. ;)

    Ich verwende jetzt deine Funktion, ist halt am schnellsten. :)

    Ok, also von der Laufzeit her ist deine Funktion tatsächlich nen Eck schneller als die strtotime()-Variante.
    Du hattest allerdings noch einen kleinen Fehler drin. Bei 6 Werktagen pro Woche darfst du auch nur durch 6 dividieren, nicht durch 7, um auf die Anzahl der Wochen zu kommen.
    An meine Bedürfnisse (= 5 Werktage pro Woche) angepasst sieht es dann so aus:

    PHP
    function getEndDate($start, $tage) {
      $w = date('w', $start);
      $start += 86400 * floor($tage + (2*(($w + $tage) / 5)));
      return date("d.m.Y",$start);
    }


    Liefert jetzt korrekte Ergebnisse und ist von der Laufzeit her die schnellste Lösung.
    Danke. :)

    Hm nee, als Werktage zählen offiziell meines Wissens nur Mo-Fr.
    Ich checke glaub grad erst deinen Code, hatte gar nicht gesehen, dass du da halt mit 6 Werktagen die Woche rechnest und die Ergebnisse deshalb anders sind.
    Ich finde aber die strtotime-Variante trotzdem noch ansprechender. Kürzer als eine Zeile geht halt nicht. Werde ich morgen am andern Rechner mal noch auf Laufzeit testen, wie schnell das ist.

    Ich kann dir gerne anhand von kleinen Beispielen, wie dem von dir geposteten, weiterhelfen. Es wäre aber gut vorab zu wissen wie dein aktueller Wissensstand ist, bezüglich PHP und MySQL.
    Egal wie wenig es ist. Dann lässt sich besser abschätzen wie man die Beispiele so aufbaut, dass du am meisten davon profitierst. Zu viel neues auf einmal ist selten produktiver als zuwenig. :)

    Verrat uns doch erstmal was du schon genau versucht hast und welche Fehlermeldungen kamen. Wieso sollten andere hier deine bereits getätigten Fehlversuche möglicherweise wiederholen? :)

    Edit: Btw, VBulletin hat doch sicher auch ein eigenes Forum laufen, wenn es ein spezifisches Problem sein sollte wärst du da vermutlich besser aufgehoben mit deiner Frage. Nicht das ich dir nicht helfen will, aber ich persönlich habe mich nie mit dem Forum befasst und weiß nicht wie es mit anderen hier aussieht. Dort findest du mit Sicherheit "Spezialisten".

    Code
    [LIST=1]
    [*][FONT=Courier New][COLOR=#0000ff]$result2[/COLOR] = dbquery[COLOR=#66cc66]([/COLOR][COLOR=#ff0000]"INSERT INTO "[/COLOR].DB_MESSAGES.[COLOR=#ff0000]" (message_to, message_from, message_subject, message_message, message_smileys, message_read, message_datestamp, message_folder) VALUES('"[/COLOR].[COLOR=#0000ff]$_GET[/COLOR][COLOR=#66cc66][[/COLOR][COLOR=#ff0000]'lookup'[/COLOR][COLOR=#66cc66]][/COLOR].[COLOR=#ff0000]"','"[/COLOR].[COLOR=#0000ff]$userdata[/COLOR][COLOR=#66cc66][[/COLOR][COLOR=#ff0000]'user_id'[/COLOR][COLOR=#66cc66]][/COLOR].[COLOR=#ff0000]"','Neuer Eintrag in Deinem Gästebuch','Du hast einen neuen Beitrag von "[/COLOR].[COLOR=#0000ff]$userdata[/COLOR][COLOR=#66cc66][[/COLOR][COLOR=#ff0000]'user_id'[/COLOR][COLOR=#66cc66]][/COLOR].[COLOR=#ff0000]" in Deinem Gästebuch.','','0','"[/COLOR].[URL='http://www.php.net/time'][COLOR=#000066]time[/COLOR][/URL][COLOR=#66cc66]([/COLOR][COLOR=#66cc66])[/COLOR].[COLOR=#ff0000]"','0')"[/COLOR][COLOR=#66cc66])[/COLOR];[/FONT]
    [/LIST]


    Wenn das erfolgreich eingetragen wurde liest du die eMail-Adresse von `message_to` aus, also von dem in dessen Gästebuch geschrieben wurde, und schickst an diesen dann einfach eine eMail, wofür du am besten die fertige Klasse phpmailer() nutzt.
    Download:
    http://sourceforge.net/projects/phpmailer
    Tutorial:
    http://phpforum.de/forum/showthread.php?t=216932

    Ich habe auch Senf! :D

    PHP
    function getEndDate($start, $tage)
    {
      $w = date('w', $start);
      $start += 86400 * floor($tage + (($w + $tage) / 7));
      return $start;
    }

    Wer braucht schon mktime, Schleifen und strtotime? So gehts doch viel schneller! :mrgreen:

    Viele liebe Grüße
    The User


    Laufzeit deiner Lösung hab ich jetzt noch nicht getestet. Es werden aber völlig falsche Ergebnisse geliefert. :)

    Ich würde spontan sagen, dass du diese beiden if-Anweisungen anpassen musst:


    Das sind einmal 60 Sekunden = 1 Minute, bzw 360 Sekunden = 6 Minuten.
    Häng z.B. bei beiden einfach mal ne 0 dran und schau ob dir die Anzeig dann besser passt.

    So funktioniert es jetzt:

    PHP
    function get_enddate($start, $tage) {
        $wochen   = floor($tage / 5);
        $rest     = $tage % 5;
        $tage    += ($wochen * 2);
        $ende     = $start + ($tage * 86400);
        $ende    += (date("w", $ende)==6 || !date("w",$ende) || (date("w",$ende)-$rest)<1) ? 172800 : 0;
        return $ende;
    }

    Wichtig ist aber, dass man zur Berechnung des Start-Timestamps mit mktime() als Parameter für die Stunden 1 übergibt, und nicht 0. Ansonsten fehlt in der Winterzeit aufgrund der Zeitumstellung ein Tag.

    edit:
    Und wie ich gerade erfahren habe geht es noch viel einfacher mittels:

    PHP
    function get_enddate($start, $tage) {
      return strtotime('+'.((int)$tage).' weekday',(int)$start);
    }

    Ok, mein Script liefert noch kein korrektes Ergebnis wie ich bei verschiedenen Tests festgestellt habe. Da ich das aber sowieso auch selber für ein umfangreiches Projekt brauche wo es mir auch auf die Laufzeit von Funktionen im Mikrosekundenbereich ankommt werde ich das noch korrigieren und hier dann posten.

    Wer nicht mit übermäßig hohen Werten arbeitet und/oder nur niedrige Zugriffszahlen auf die Funktion hat kann auf jedenfall die Lösung von Crazywulf auch gut nehmen.
    Ist in der Laufzeit halt länger, dafür weniger Zeilen Code was das Script übersichtlicher macht.

    Da darf mein Senf natürlich auch nicht fehlen :D


    Das sind zwar weniger Zeilen, es ist aber trotzdem wesentlich langsamer als meine Lösung, da du 7x soviele schleifendurchläufe brauchst:

    Ist zwar nur im Mikrosekunden-Bereich, aber läppert sich halt alles, je umfangreicher die Scripte werden.

    Ist die Datei im utf8-Format? Da wird default ein BOM (Byte Order Mark) an den Browser gesendet wodurch bereits ein Output vorhanden ist.
    In dem Fall kannst du mit nem vernünftigen Editor (ich nutze z.B. Notepad++) die Datei im Format "utf8 ohne BOM" speichern.
    Dann passt das wieder.

    Falls MySQL zur Verfügung stehen sollte:

    SQL
    SELECT FROM_UNIXTIMESTAMP('9000','%H:%i:00') AS zeitformat

    ;)

    Hast du das ausprobiert? Eine ähnliche Funktion wäre in php ja date(), da fangen die Stunden aber bei 01 an. Ich weiß jetzt nicht wie es bei sql ist.

    PHP
    $sekunden = 45; 
    echo date("H:i:s",$sekunden);  // Ausgabe: 01:00:45

    Beides geht allerdings auch nur bis 23/24 Stunden maximum, keine Ahnung was für Wert da durchgejagt werden sollen.

    Edit: Ok, Alternative für Werte bis maximal 23:59:59

    PHP
    $sekunden  = 45; 
    $sekunden += 82800;  // = 23 Stunden
    echo date("H:i:s",$sekunden);  // Ausgabe: 00:00:45

    Kein Thema, solange du auch versuchst es zu verstehen und nicht nur blind kopierst gerne. :)
    Hier zum Abschluss nochmal eine etwas brauchbarere Lösung, die da oben war nur auf den Kern der Sache eben runtergeschrieben.

    Modulo ermittelt dir den Restwert zu einer Ganzzahl als Ergebnis beim dividieren ganzer Zahlen.

    Bsp:
    a % b = c

    c ist die Differenz zwischen a und dem höchsten Vielfachen von b das kleiner als a ist.

    11 % 3 = 2

    Das größte Vielfache von 3 das kleiner 11 ist ist 9. Und 11 - 9 = 2.
    Etwas klarer?

    Ups, $we kommt aus nem Projekt von mir das noch in Entwicklung ist und wo diese Funktion noch nicht getestet wurde, habe ich vergessen rauszustreichen.
    Das +2 am Sonntag passt aber schon, der Tag davor war dann ja ein Samstag der auch noch dazuaddiert werden muß, wenn ich mich grad nicht gänzlich vertue. ;)

    Ungetestet, kommt aber mit weniger Schleifendurchläufen aus: