Heute bis morgen oder am Gleichen Tag

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Heute bis morgen oder am Gleichen Tag

    Hallo Zusammen,

    ich benötige mal Hilfe da ich gerade an den Kleinen Punkt Festhängen tute und nicht weis wie ich dies Lösen kann.
    Also ich will was Bauen da wenn man etwas eintrage in z. B. Tickets gibt es nur heute oder man kann nur von dan bis dan das bekommen.


    PHP-Quellcode

    1. if(date("H",time()) >= $Optionen['Von']['Von_Tag'] && date("H",time()) <= $Optionen['Von']['Bis_Tag']){
    2. //Variabel Übergeben
    3. }
    Wenn ich nun z. B. 18 bis 10(nehsten Tag) angebe wird die Variable nicht freigegeben.
    Gebe ich aber 18-22 Uhr an so wird diese Übergeben.

    da häng ich nun fest wie kann ich das am aller Besten lösen?

    Ich hoffe man versteh was ich meine wenn nicht einfach bitte bescheid geben den versuch ich es anders zu erklären.
    LG Kevins
  • Hallo Kevins,
    grundsätzlich erstmal herzlich Willkommen! :)

    Unter folgendem Link findest du die Funktion, die du nutzt: php.net/manual/de/function.date.php
    Dort findest du den

    Quellcode

    1. format
    -Parameter den du ja bereits anwendest. Du schaust nun allerdings, ob H (was laut Parameter-Informationsliste die Stunden im 24h-Format sind) größer gleich dem Wert [php]$Optionen['Von']['Von_Tag'][/php] entspricht. Ich weiß nun nicht was hinter dem Wert im Array steckt, ob das ein Wochentag als Zahl beinhaltet, oder doch den Tag im Monat (01-31), ... aber grundsätzlich würde ich dir empfehlen (ohne große Begründung, ich habe es damals ohne Framework ebenso gemacht) den Timestamp

    Quellcode

    1. time()
    mit dem im Array enthaltenen Wert, der dann ebenfalls ein Timestamp sein sollte, zu vergleichen.

    Was ein Timestamp ist, erfährst du hier: de.wikipedia.org/wiki/Zeitstempel
    "Das müsste jetzt funktionieren..."

    ---
    Mit freundlichen Grüßen,
    Vincent Petritz
  • Okay ich versteh dein Text schon was du meinst aber mein Problem hab ich leider nicht lösen können.


    PHP-Quellcode

    1. $Optionen['Von']['Von_Tag']
    Da steht eine Zeit Hinter, sorry hatte ich vergessen zu Erwähnen.

    also ein andres Beispiel.
    Von Heute 20 Uhr bis Morgen früh um 10 Uhr soll das erhältlich sein.
    Es kann aber auch vorkommen das es von 20 Uhr bis 22 Uhr heute nur Gültig sein soll.
    In beiden Fällen soll die Variable Freigeben werden.
  • Das freut mich, dass du das soweit nachvollziehen konntest.
    Was heißt, "da steht eine Zeit hinter"? Ein DateTime-Objekt, ein Timestamp oder etwas ganz anderes? Ich müsste ja wissen um was für ein Datentyp es sich handelt bzw. generell, was für ein Wert [php]$Optionen['Von']['Von_Tag'][/php] hat. :)
    "Das müsste jetzt funktionieren..."

    ---
    Mit freundlichen Grüßen,
    Vincent Petritz
  • PHP-Quellcode

    1. // nur um sicher zu gehn, dass wir die richtigen Timestamps bauen
    2. date_default_timezone_set("Europe/Berlin");
    3. $now = time();
    4. $nextDay = $now + 86400;
    5. $startTime = mktime($Optionen['Von']['Von_Tag'], 0, 0);
    6. $endTime = ($Optionen['Von']['Von_Tag'] > $Optionen['Von']['Bis_Tag'])
    7. ? mktime($Optionen['Von']['Bis_Tag'], 0, 0) + 86400
    8. : mktime($Optionen['Von']['Bis_Tag'], 0, 0);
    9. if ($now >= $startTime
    10. && ($now <= $endTime || $nextDay <= $endTime)) {
    11. // lets do it
    12. }
    Alles anzeigen
    Ich habe alle Daten in Timestamps konvertiert (muss man nicht, finde ich aber schöner) und im Vergleich ein zusätzliches Oder eingebaut.
    Ist zugegeben nicht die schönste Lösung, aber wenn ich nichts übersehen habe, funktioniert sie zumindest.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von freeek ()

  • Sorry, mein Fehler. Das hat bei Tageslicht betrachtet auch keinen Sinn ergeben, deswegen hier nochmal. Jetzt sind hoffentlich alle Fälle abgedeckt.

    PHP-Quellcode

    1. $now = time();
    2. $startTime = mktime($Optionen['Von']['Von_Tag'], 0, 0);
    3. $endTime = ($Optionen['Von']['Von_Tag'] > $Optionen['Von']['Bis_Tag'])
    4. ? mktime($Optionen['Von']['Bis_Tag'], 0, 0) + 86400
    5. : mktime($Optionen['Von']['Bis_Tag'], 0, 0);
    6. if ($now >= $startTime && $now <= $endTime) {
    7. //
    8. }