Ankündigung

Einklappen
Keine Ankündigung bisher.

Php Datums Überprüfung funktioniert nicht korrekt.

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Php Datums Überprüfung funktioniert nicht korrekt.

    Hey,

    Ich arbeite gerade an einem kleinen System welches den Cursor zu Speziellen Events / Feiertragen ändert [z.B. vom 24-26 Dezember ist der Cursor ein Geschenk]
    Leider funktioniert die überprüfung vom Datum nicht richtig, und der Geschenk Cursor wird auch im Januar angezeigt.
    Ich habe keine Idee mehr woran das liegen kann. Das Datum ist in einer Config.php welche ich dann auch lade.

    Hier mal mein Code:
    PHP-Code:
    $date date("d.m");

    if((
    $date >= $christmas_from) && ($date <= $christmas_to)){
    echo 
    '<link href="css/cursor.php" rel="stylesheet">';
    } else if(
    $date == $birthday_date){
    echo 
    '<link href="css/cursor.php" rel="stylesheet">';
    } else if((
    $date == $newyear_from) || ($date == $newyear_to)){
    echo 
    '<link href="css/cursor.php" rel="stylesheet">';
    } else {
    echo 
    '<!-- Custom Cur Disabled! -->';

    Das Datum ist wie folgt in der Config eingetragen:
    PHP-Code:
    //============================ Christmas Cursor ============================//

    $christmas_from '24.12';
    $christmas_to '26.12';

    //============================ Birthday Cursor =============================//

    $birthday_date "19.06";

    //============================ New Year Cursor =============================//

    $newyear_from '31.12';
    $newyear_to '01.01'
    Ich hoffe dass ihr eine idee habt wo der fehler liegen könnte.
    Grüße

  • #2
    Hey, so kann man das nicht prüfen, da php hier auf string prüft und nicht auf das Datum an sich. Entweder die Date Funktionen benutzen oder einfach Datum und Monat umdrehen.


    Vielleicht wird so klarer:

    PHP-Code:
    //============================ Christmas Cursor ============================//

    $christmas_from '12.24';
    $christmas_to '12.26';

    //============================ Birthday Cursor =============================//

    $birthday_date "06.19";

    //============================ New Year Cursor =============================//

    $newyear_from '12.31';
    $newyear_to '01.01';

    $date date("m.d");

    // christmas test
    $date '12.25';

    // birthday test
    $date '06.19';

    // newyear test
    $date '01.01';


    if((
    $date >= $christmas_from) && ($date <= $christmas_to)){
      echo 
    '<link href="css/cursor.php" rel="stylesheet">';
      echo 
    "<br/>christmas";
    } else if(
    $date == $birthday_date){
      echo 
    '<link href="css/cursor.php" rel="stylesheet">';
      echo 
    "<br/>birthday";
    } else if((
    $date == $newyear_from) || ($date == $newyear_to)){
      echo 
    '<link href="css/cursor.php" rel="stylesheet">';
      echo 
    "<br/>newyear";
    } else {
      echo 
    '<!-- Custom Cur Disabled! -->';

    Viele Grüße

    Kommentar


    • #3
      Zitat von Testie Beitrag anzeigen
      Hey, so kann man das nicht prüfen, da php hier auf string prüft und nicht auf das Datum an sich. Entweder die Date Funktionen benutzen oder einfach Datum und Monat umdrehen.
      Also das wie oben gezeigt funktioniert leider nicht, selbst wenn dann das Datum richtig wäre, funktioniert es nicht.
      Ich habe aber herausgefunde, dass er das Datum nicht mal richtig erkennt und irgendwas durcheinander mixt:
      PHP-Code:
      echo date("m.d"strtotime('12.24')) . '<br/>';
      echo 
      date("m.d"strtotime('12.26')); 
      Gibt beides 01.27 aus, weiß nicht ob das weiter hilft.
      Zuletzt geändert von Nightland Driver; 27.01.2021, 00:58.

      Kommentar


      • #4
        Lies die Doku von strtotime:
        Wandelt ein beliebiges in englischer Textform angegebenes Datum in einen UNIX-Zeitstempel (Timestamp) um
        https://www.php.net/manual/de/function.strtotime.php
        Dort sind auch Beispiele angegeben.

        Kommentar


        • #5
          Ich habe den Fehler gefunden warum es immer ein falsches Datum angegeben hat, an einer stelle weiter oben im Code hatte ich eine Test Variable mit dem Namen $christmas_from stehen, welche dann das aus der Config überschrieben hatte. Nun funktioniert das soweit, aber ich würde das format welches in meiner Config steht (d.m) in das zur überprüfung benötigte (m.d) umwandeln. Gibt es da eine einfache lösung für ohne mit zwischenvariablen zu arbeiten?
          Zuletzt geändert von Nightland Driver; 27.01.2021, 16:48.

          Kommentar


          • #6
            Hallo...

            php bietet für das Arbeiten mit Zeitzonen (timezones) die Erweiterung 'intl.so' an. Diese muss vorher
            in der php.ini eingebunden sein. Erleichtert den Umgang mit date/time erheblich => absolute Empfehlung !!!

            Suche in deiner php.ini die Zeile ";extension=intl". Wenn hier am Zeilenanfang noch das Semikolon steht
            dann lösch das Semikolon und intl steht dann künftig zur Verfügung (Serverneustart nicht vergessen).

            Anbei ein Schnipsel (objektorientiert):

            $dateTime = new DateTime('2021-01-30', new DateTimeZone('Europe/Berlin'));
            $formatter = new IntlDateFormatter('de_DE', IntlDateFormatter::LONG, IntlDateFormatter::NONE);

            echo $formatter->format($dateTime);

            Mit $date wird ein neues Datum (hier 30.01.2021 in int. Schreibweise) deklariert und mit Komma getrennt
            die Zeitzone 'Europa/Berlin' für dieses Datum festgelegt.

            Deinem Codeschnipsel entnehme ich, dass du eher prozedual codest. Dann sähe das ganze so aus:

            $dateTime = date_create('2021-01-30', timezone_open('Europe/Berlin'));
            $formatter = datefmt_create('de_DE', IntlDateFormatter::LONG, IntlDateFormatter::NONE);

            echo datefmt_format($formatter, $dateTime);

            Mit dem Aufruf 'IntlDateFormatter' wird nun mit dem Parameter ('de_DE') die deutsche Notation erzeugt. Nicht nur d/m/y sondern auch aus 'July' wird 'Juli' :-)
            (LONG macht z.B. statt 'Nov.. => 'November'...

            Google unter IntlDateFormatter und du wirst echt gute Docs dazu finden (meist jedoch in englisch)

            Gruß

            Kommentar


            • #7
              Danke für den Tipp, das werde ich dann mal austesten.

              Kommentar

              homepage-forum.de - Hilfe für Webmaster! Statistiken

              Einklappen

              Themen: 56.806   Beiträge: 430.100   Mitglieder: 28.559   Aktive Mitglieder: 52
              Willkommen an unser neuestes Mitglied, daetr2095.

              Online-Benutzer

              Einklappen

              256 Benutzer sind jetzt online. Registrierte Benutzer: 4, Gäste: 252.

              Mit 3.502 Benutzern waren am 23.01.2020 um 18:20 die meisten Benutzer gleichzeitig online.

              Die neuesten Themen

              Einklappen

              • daetr2095
                Webseite, die local erreichbar ist, im Internet erreichbar machen
                Ich habe auf Debian Buster: Mysql, php8, Apache, Phomyadmin laufen.
                Local funktioniert auch alles.
                Ich möchte nun meine Webseite, die local erreichbar ist, im Internet erreichbar machen.
                Per Portfreigabe habe ich es schon probiert doch die unterstützt mein Router(Vodaphone Station)...
                Heute, 10:12
              • Megabyte
                Antwort auf Vane
                Hallo...

                Öffne mal mit einem reinen Texteditor (notepad++, vscode etc.) die Datei 'wp-config.php' im Wordpress-Installationsverzeichnis. Dort solltest du folgende Zeile finden: define( 'WP_AUTO_UPDATE_CORE', 'minor' );

                Kannst auch mal 'minor' mit 'true' überschreiben. Das...
                Gestern, 02:41
              • Megabyte
                Antwort auf Formularvalidierung - Wie macht ihr es?
                Ist ein Kurs von "WBS Training" und nennt sich "Webdevelopement & Webdesign" mit Abschlusszertifikat. Da es in dem Bereich ja keine regulierten Normen für diese Begrifflichkeiten gibt ist es wohl eher ein Teilnahmenachweis und Zeugnis. Da mein letzter Arbeitgeber Konkurs anmelden...
                Gestern, 02:34
              • Localfu
                Antwort auf Formularvalidierung - Wie macht ihr es?
                Mag schon sein, dass Siemens noch den Internet Explorer 8 als Standard verwendet, aber selbst zu der Zeit des Internet Explorer 8 war dieser schon veraltet und hat Standards aus HTML4 nicht wieder gegeben. Zudem war der Zweifel der Sicherheit schon immer groß, wenn es um IE geht. HTML4 ist seit Jahren...
                03.03.2021, 23:40
              • Megabyte
                Antwort auf Formularvalidierung - Wie macht ihr es?
                Hehehe... War genau MEIN Argument an den Dozenten :-). Seine Antwort war, dass diese Kenntnisse im Kurs vermittelt werden damit zumindest das Wissen über die Unterschiede und deren Historie bekannt sind. Ferner meinte er, dass er schon etliche Kunden hatte welche ewig nicht upgedatet haben (aus zum...
                03.03.2021, 22:50

              Die neuesten Beiträge

              Einklappen

              Lädt...
              X