Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Monat und Tag aus <input type="date"> auslesen

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Monat und Tag aus <input type="date"> auslesen

    Hallo,

    ich habe folgedes Problem:

    Ich habe eine HTML-Seite. Hier gebe ich ein Datum ein (z.B. 01.02.2003).
    Für diese Eingabe benutze ich zur Zeit
    Code:
    <input name="datum" type="date">
    (natürlich in einer <form action="auswertung.php" method="post")

    Jetzt möchte ich auf meiner php-Seite abhängig vom Monat und Tag etwas ausgeben: Das Sternzeichen. Ich möchte switch und optional if verwenden.
    Das Jahr soll also keine Beachtung finden (aber dennoch eingegeben werden).

    PHP-Code:
    <?php
    $geb
    $_POST["datum"]; 

    switch (
    $monat) {
    case 
    Januar:
    if (
    $tag>20) {
    echo 
    "Wassermann";
    } else{
    echo 
    "Steinbock";
    }
    case 
    Februar:
    [...]
    }
    ?>

    Ich weiß nicht, wie ich die $monat und $tag korrekt ausgewertet bekomme.
    Eine Alternativ-Lösung mit zwei input-Feldern (Einmal für Monat einmal für Tag) in der HTML Datei habe ich bereits.

    Bin ich vielleicht auch komplett auf den falschen Lösungsansatz? Das Arbeiten mit type="date" gelingt mir nicht recht.

    Mit freundlichen Grüßen

    Josh

  • #2
    Du bekommst dein Datum in Format 2015-03-09 (Y-m-d) zurück.

    PHP-Code:
    $date = new DateTime($_POST['datum']);

    switch(
    $date->format('n'))
    {
        case 
    1:
            if(
    $date->format('d') > 20)
            {
                 
    // Some Code
            
    }
            break;

    Und wenn ich mir deinen Code so ansehe solltest du unbedingt PHP-Grundlagen lernen.
    - Laravel

    Kommentar


    • #3
      Vielen Dank!!

      Jetzt hat es geklappt!
      Kleiner Tippfehler, "n" (im switch) soll "m" sein.. Für irgendwelche Leute, die dashier vllt. per google oä gefunden haben.

      Zitat von tera3yte Beitrag anzeigen
      Und wenn ich mir deinen Code so ansehe solltest du unbedingt PHP-Grundlagen lernen.
      Japs! Finde es sehr interessant, ich bin gerade beim Lernen, die "Aufgabe" hatte keinen anderen Zweck. Jedoch bin ich noch im ersten Ausbildungsjahr & php ist leider nur ein sehr geringer Bestandteil davon.


      Gruss


      Josh

      Kommentar


      • #4
        Zitat von JustJosh Beitrag anzeigen
        Kleiner Tippfehler, "n" (im switch) soll "m" sein..
        Nein, »n« ist schon richtig, »m« gibt den Monat mit führender Null aus und »n« ohne die Null.

        Kommentar


        • #5
          Fand das Thema mit den Sternzeichen ganz interessant und würde das gerne in die PHP.de Wissensammlung (DateTime) aufnehmen. Hab dazu auf die Schnelle nichts "Schönes" dazu gefunden, was meint ihr dazu als "Ansatz"?

          PHP-Code:
          function getSignOfZodiac($sMonthDay) {

              
          // Als sub-array, da Steinbock 2x vorhanden, daher array mit Name als Key nicht möglich
              // name, from ('md'), to ('md')
              
          $signs = [ 
                  [
          'n' => 'Steinbock',  'f' => '0101''t' => '0120'], 
                  [
          'n' => 'Wassermann''f' => '0121''t' => '0219'], 
                  [
          'n' => 'Fische',     'f' => '0220''t' => '0320'], 
                  [
          'n' => 'Widder',     'f' => '0321''t' => '0420'], 
                  [
          'n' => 'Stier',      'f' => '0421''t' => '0520'], 
                  [
          'n' => 'Zwillinge',  'f' => '0521''t' => '0621'], 
                  [
          'n' => 'Krebs',      'f' => '0622''t' => '0722'], 
                  [
          'n' => 'Löwe',       'f' => '0723''t' => '0823'], 
                  [
          'n' => 'Jungfrau',   'f' => '0824''t' => '0923'], 
                  [
          'n' => 'Waage',      'f' => '0924''t' => '1023'], 
                  [
          'n' => 'Skorpion',   'f' => '1024''t' => '1122'], 
                  [
          'n' => 'Schütze',    'f' => '1123''t' => '1221'], 
                  [
          'n' => 'Steinbock',  'f' => '1222''t' => '1231']
              ];
              
          // check valid input lenght/type
              
          if (strlen($sMonthDay) <> || !ctype_digit($sMonthDay)) {
                  return 
          false;
              }
              
          // search sign
              
          foreach ($signs as $key => $aSub) {
                  if (
          $sMonthDay >= $signs[$key]['f'] && $sMonthDay <= $signs[$key]['t'] ) {
                      return 
          $signs[$key]['n'];
                  }
              }
              
          // nothing found
              
          return false;

          PHP-Code:
          // 24.12.
          var_dumpgetSignOfZodiac('1224') ); // Steinbock

          // heute 09.03.
          $dt date_create('now')->format('md'); // '0309'
          var_dumpgetSignOfZodiac($dt) ); // Fische 
          Ansonsten hab ich noch diesen Ansatz gefunden, aber gerade keine Lust dazu (Schaltjahr etc..): http://stackoverflow.com/questions/1...nd-format-date

          LG
          The string "()()" is not palindrom but the String "())(" is.

          Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
          PHP.de Wissenssammlung | Kein Support per PN

          Kommentar


          • #6
            Schöner Ansatz.
            Die Variante von stackoverflow gefällt mir dagegen nicht.
            Das Array mit der Tagnummer im Jahr ist schlecht nachzuvollziehen und das Gebastle mit der Schaltjahrproblematik macht dies noch unübersichtlicher.

            Zurück zum Ansatz von hausl.
            Warum ein String in einem speziellen Format der Funktion übergeben und kein Datum?

            Sofern per Array Intervalle definiert werden sollen, welche keine Lücken haben und sich nicht überschneiden, nehme ich gerne immer nur ein Wert ins Array. Dies ist dann je nach Anwendung der Intervallanfang oder das Intervallende.
            Die Übersichtlichkeit leidet darunter etwas, dafür ist es kürzer.

            PHP-Code:
            //$date is a object of DateTime or a String
            function getSignOfZodiacFromDate($date) {
              if(
            is_string($date)) $date date_create($date);
              if(! 
            $date instanceof DateTime) return false;
              
            $monthDay $date->format('md');
              
              
            // SignsOfZodiac: to('md') => sign
              
            $signs = array(
                
            '0120' => 'Steinbock',
                
            '0219' => 'Wassermann',
                
            '0320' => 'Fische',
                
            '0420' => 'Widder',
                
            '0520' => 'Stier',
                
            '0621' => 'Zwilling',
                
            '0722' => 'Krebs',
                
            '0823' => 'Löwe',
                
            '0923' => 'Jungfrau',
                
            '1023' => 'Waage',
                
            '1122' => 'Skorpion',
                
            '1221' => 'Schütze',
                
            '1231' => 'Steinbock'
              
            );

              foreach(
            $signs as $toMonthDay => $sign){
                if(
            $monthDay <= $toMonthDay) return $sign;
              }
              return 
            false;  

            Tests:
            PHP-Code:
            //strings
            var_dump(getSignOfZodiacFromDate('today')); //"Fische"

            var_dump(getSignOfZodiacFromDate('15.01.1984')); //"Steinbock"

            //object
            $date = new DateTime('03.04.1981');
            var_dump(getSignOfZodiacFromDate($date));  //"Widder" 
            Die Variante Datumsfunktionen/Methoden sowohl strings als auch Datumsobjekte übergeben zu können,
            mache ich schon eine Weile so. Schön bequem..

            LG jspit

            Kommentar


            • #7
              Ja, der gefällt mir besser als meiner oben

              Zitat von jspit
              Sofern per Array Intervalle definiert werden sollen, welche keine Lücken haben und sich nicht überschneiden, nehme ich gerne immer nur ein Wert ins Array
              +1. Und du sparst dir zusätzlich auch noch das sub-Array.

              Zitat von jspit
              Die Variante Datumsfunktionen/Methoden sowohl strings als auch Datumsobjekte übergeben zu können, mache ich schon eine Weile so. Schön bequem..
              Ich hatte zuerst auch überlegt, ein Datum zu verwenden, dachte mir dann aber das es für die Ermittlung nicht nötig (irrelevant) ist. Aber so im Nachhinein betrachtet mit Blick auf die Anwendung in der Praxis hat man wohl im Grunde immer schon ein Datum(-objekt) als Inputwert und müsse bei meiner Variante dann zusätzlich umbasteln.
              The string "()()" is not palindrom but the String "())(" is.

              Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
              PHP.de Wissenssammlung | Kein Support per PN

              Kommentar


              • #8
                Zur info - ist nun auch hier: http://php-de.github.io/jumpto/datetime/#sternzeichen

                LG
                The string "()()" is not palindrom but the String "())(" is.

                Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                PHP.de Wissenssammlung | Kein Support per PN

                Kommentar

                Lädt...
                X