Datum des nächsten Wochentags ausrechnen

  • PHP

Es gibt 20 Antworten in diesem Thema. Der letzte Beitrag () ist von Link275.

    Datum des nächsten Wochentags ausrechnen

    Guten Morgen Paradiser :D

    Mein Problem ist ziemlich schwer zu erklären, aber ich hoffe ihr versteht was ich meine.

    Als kleines Beispiel nehmen wir jetzt mal den Wochentag Montag

    Das Script was ich brauche soll das Datum dieses Montags ausgeben, jedoch kommt jetzt das schwierige, wenn der Montag vorbei ist, also es Dienstag ist, soll das Datum vom nächsten Montag angezeigt werden, ist der wieder vergangen -> nächster Montag.

    Vielleicht ist das ja gar nicht so übel wie ich denke oder ich habe einfach nicht scharf genug nachgedacht, hoffe jemand hier kann mir helfen.

    Liebe grüße,
    require
    Bitte keine VB-Fragen üb... Ach scheiß drauf, mich fragt ja eh keiner.
    Hi
    hatten wir ja erst. Einfach den vergangenen Montag oder Sonntag (ist in der DayOfWeek-Enumeration der Tag 0) ermitteln und dann den gesuchten Tag aufaddieren. Sofern der Tag bereits vergangen ist, einfach noch eine Woche aufaddieren. TimeSpan enthält ein paar Konstanten, die dir die Ticks pro Tag angeben oder ein paar praktische Funktionen, den Rest erledigt DateTime ja für dich.

    Gruß
    ~blaze~

    Manawyrm schrieb:

    Die erste (clusterfuck!!!) Lösung wäre, auf den aktuellen Timestamp so lange 3600*24 draufzuaddieren, bis man irgendwann auf nem Wochentag landet... *grusel*


    Okay, das wäre eigentlich die einzige Lösung bisher.

    86400*7 müsste dann ja den nächsten Montag ergeben.
    Aber wie bekomme ich aus dieser Rechnung das Datum?
    Bitte keine VB-Fragen üb... Ach scheiß drauf, mich fragt ja eh keiner.
    Bei PHP.de macht man das ebenfalls so.

    PHP-Quellcode

    1. function werktageAddieren($addTage)
    2. {
    3. $zeitpunkt = time();
    4. $tag = getdate($zeitpunkt);
    5. if($tag['weekday'] == "Saturday")
    6. {
    7. $zeitpunkt = $zeitpunkt + 86400*2;
    8. }
    9. if($tag['weekday'] == "Sunday")
    10. {
    11. $zeitpunkt = $zeitpunkt + 86400;
    12. }
    13. for ($i = 0; $i < $addTage; $i++)
    14. {
    15. $zeitpunkt = $zeitpunkt + 86400;
    16. $tag = getdate($zeitpunkt);
    17. if($tag['weekday'] == "Saturday")
    18. {
    19. $zeitpunkt = $zeitpunkt + 86400 * 2;
    20. }
    21. }
    22. $zeitpunkt = date("d.m.Y",$zeitpunkt);
    23. return $zeitpunkt;
    24. }


    Quelle: php.de/php-tipps-2009/53820-er…nem-datum-addieren-2.html

    PHP-Quellcode

    1. echo date('r', strtotime('next monday'));
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.

    ~blaze~ schrieb:

    Verdammt, überlesen. ;) Sofern PHP sowas, wie DateTime, etc. unterstützt, funktioniert es allerdings analog. Ich kann kein PHP, aber sollte es nicht auch eine Funktion geben, die den aktuellen Wochentag ermittelt?

    Gruß
    ~blaze~

    Doch die gibt es

    PHP-Quellcode

    1. setlocale(LC_TIME, "de_DE");
    2. echo strftime("%A");


    Jedoch brauche ich ja das Datum..

    /* Werde mir die vorherigen antworten mal durchlesen */
    Bitte keine VB-Fragen üb... Ach scheiß drauf, mich fragt ja eh keiner.
    mit DateTime z.B. so:

    PHP-Quellcode

    1. $dt = new DateTime();
    2. $dt->setTimestamp(strtotime('next monday'));
    3. echo $dt->format(DateTime::RFC2822);
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    @Manawyrm

    Funktioniert perfekt, danke dir.
    Aber das ist ziemlich blöde, da ich ja nur das neue datum will wenn der "alte Montag" vorbei ist.

    Also wenn Dienstag ist wird ja der nächste Dienstag angezeigt und nicht mehr der Montag :s

    @Lukas
    das funktioniert super :D Kann man die ausgabe noch konvertieren?

    Mon, 06 May 2013 00:00:00 +0200
    Bitte keine VB-Fragen üb... Ach scheiß drauf, mich fragt ja eh keiner.
    Die Formatierungen findest du hier (auch wenn es eine andere Funktion ist): php.net/manual/de/function.date.php

    Was mir gerade noch eingefallen ist:

    PHP-Quellcode

    1. $d = date('w', time());
    2. $str = '';
    3. if($d == 0 || $d == 6)
    4. $str = 'next monday';
    5. else
    6. $str = 'tomorrow';
    7. $dt = new DateTime();
    8. $dt->setTimestamp(strtotime($str));
    9. echo $dt->format(DateTime::RFC2822);

    Edit: und auf Freitag prüfen.
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Lukas“ ()

    Ausgabe bleibt jedoch bei

    Mon, 06 May 2013 00:00:00 +0200


    //C&P Fail, lol. Werde es mal versuchen
    Btw, es wird trzd noch der nächste sonntag (12. Mai) angezeigt wenn ich auf sunday stelle

    E:\\

    PHP-Quellcode

    1. <?php
    2. $d = date('w', time());
    3. $str = '';
    4. if($d == 0 || $d == 6)
    5. $str = 'next sunday';
    6. else
    7. $str = 'tomorrow';
    8. $dt = new DateTime();
    9. $dt->setTimestamp(strtotime($str));
    10. echo $dt->format('d.m.Y');
    11. ?>


    Funktioniert super jedoch wird der 12. Angezeigt da muss jedoch (Heute zumindest) noch 5. stehen :s
    Bitte keine VB-Fragen üb... Ach scheiß drauf, mich fragt ja eh keiner.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „require“ ()

    Warte mal, was willst du jetzt? Nächsten Wochen- oder Werktag?
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    Einfache Sache, einfach mein Beispiel aus Post #9 auf 'tomorrow' setzen.

    Und der 5. hat schon angefangen. Also wäre der 6. richtig.
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    Ich benutze das Beispiel..

    Der 5. sollte angezeigt werden.. Habe das Script auf Sonntag gestellt

    Mein jetziger Code:

    PHP-Quellcode

    1. <?php
    2. $d = date('w', time());
    3. $str = '';
    4. if($d == 0 || $d == 6)
    5. $str = 'next sunday';
    6. else
    7. $str = 'tomorrow';
    8. $dt = new DateTime();
    9. $dt->setTimestamp(strtotime($str));
    10. echo $dt->format('d.m.Y');
    11. ?>
    Bitte keine VB-Fragen üb... Ach scheiß drauf, mich fragt ja eh keiner.
    Heute ist der 5. Also willst du den heutigen Tag? Was in Verbindung mit morgen soll der 12. angezeigt werden wenig Sinn ergibt.
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.

    Lukas schrieb:

    Heute ist der 5. Also willst du den heutigen Tag? Was in Verbindung mit morgen soll der 12. angezeigt werden wenig Sinn ergibt.


    Heute soll das Datum von Heute angezeigt werden, wenn nicht mehr Heute ist (lol^^) dann soll der nächste Sonntag angezeigt werden -> 12.5

    Wird schon sinn haben so wie ich es nutze
    Bitte keine VB-Fragen üb... Ach scheiß drauf, mich fragt ja eh keiner.

    PHP-Quellcode

    1. $dt = new DateTime();
    2. $days = array('sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday');
    3. $current = date('w', time());
    4. $trigger = 0; //für sunday
    5. if($current != $trigger)
    6. $dt->setTimestamp(strtotime('next '.$days[$trigger]));
    7. echo $dt->format('d.m.Y');

    müsste funktionieren.
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.