Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Alle Daten mit einem Datum ermitteln und ausgeben

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Alle Daten mit einem Datum ermitteln und ausgeben

    Hallo,
    ich würde gerne alle Daten die ein bestimmten Monat in einem Bestimmten Jahr haben ermitteln und ausgeben und komme echt nicht dahinter wie ich das anstellen soll das Datum sieht so aus:

    Beispiel 5 Juni 2012

    05.06.2012 kann es aber natürlich auch wenn es was bringt in 05-06-2012 ändern


  • #2
    Weder noch es sollte 2012-06-05 sein

    Gruß

    Claus
    Pre-Coffee-Posts sind mit Vorsicht zu geniessen!

    Kommentar


    • #3
      Beispielcode?
      Standards - Best Practices - AwesomePHP - Guideline für WebApps

      Kommentar


      • #4
        Zitat von Thallius Beitrag anzeigen
        Weder noch es sollte 2012-06-05 sein

        Gruß

        Claus
        Habs geändert ist jetzt 2012-06-05

        Tut mir leid ich meinte ich würde gern alle Daten ausgeben die in einen Monat sind und das das Automatisch erkennt wird... Schuldigung also 2012-06-00 bis 2012-07-00

        Kommentar


        • #5
          Was soll automatisch erkannt werden? Deine Abfrage hast du ja eigentlich schon fast da stehen...

          Kommentar


          • #6
            http://www.php.de/php-einsteiger/797...tml#post595038

            5sek. Google-Suche!
            Competence-Center -> Enjoy the Informatrix
            PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

            Kommentar


            • #7
              *grusel* Außer dem Beitrag von tr0y ist da aber nichts Empfehlenswertes dabei.

              Zitat von JulianS Beitrag anzeigen
              Hallo,
              ich würde gerne alle Daten die ein bestimmten Monat in einem Bestimmten Jahr haben ermitteln und ausgeben und komme echt nicht dahinter wie ich das anstellen soll das Datum sieht so aus:

              Beispiel 5 Juni 2012

              05.06.2012 kann es aber natürlich auch wenn es was bringt in 05-06-2012 ändern

              (...)

              Habs geändert ist jetzt 2012-06-05
              Es kommt darauf an, welchen Aufwand du treiben möchtest und wie benutzerfreundlich du die Ausgaben präsentieren möchtest.

              Ich habe mal eine Klasse zusammengeschraubt, die mit den Objekten der Intl-Klasse arbeitet. Die haben den Vorteil, dass sie mit Unicode umgehen können und die Formatierung ganz nach Belieben gestaltet werden kann.

              Ein eingebautes Iterator-Interface sorgt für ein korrektes Abzählen der Tage.

              PHP-Code:
              class CalendarMonth implements Iterator {

                  
              // $loc: string() locale
                  // $y: int() year
                  // $m: int(1...max) month
                  
              static function create($m null$y null$loc null) {
                      return new 
              self($m$y$loc);
                  }

                  function 
              __construct($m null$y null$loc null) {
                      
              $cal IntlCalendar::createInstance(null$loc);

                      
              $this->null === $y $cal->get(IntlCalendar::FIELD_YEAR) : (int) $y;

                      
              // ->set(IntlCalendar::FIELD_MONTH, invalid_number) does not seem to work
                      
              if (null === $m) {
                          
              $this->$cal->get(IntlCalendar::FIELD_MONTH);
                      }
                      else {
                          
              $m -=1// IntlCalendar:: months are 0-based (i.e.: 0...11 JAN...DEC)
                          
              if (
                              
              $m $cal->getMinimum(IntlCalendar::FIELD_MONTH) ||
                              
              $m $cal->getMaximum(IntlCalendar::FIELD_MONTH)
                          ) {
                              throw new 
              Exception('given month number is out of the allowed range');
                          }
                          
              $this->$m;
                      }

                      
              $this->cal $cal;
                      
              $this->formatter IntlDateFormatter::create(
                          
              $locIntlDateFormatter::MEDIUMIntlDateFormatter::NONEnull$cal
                      
              );
                  }

                  
              // $cal: const() IntlDateFormatter::(TRADITIONAL|GREGORIAN)
                  
              function setCalendarType($cal) {
                      if (!
              $this->formatter->setCalendar($cal)) {
                          throw new 
              Exception('invalid calendar type given');
                      }
                      return 
              $this;
                  }

                  
              // $loc: string() locale
                  
              function setLocale($loc) {
                      
              // there is no ->setLocale() method so we have to recreate the formatter object
                      
              $caltype $this->formatter->getCalendar();
                      
              $fmt $this->formatter->getPattern();
                      
              // does not fail on invalid inputs, but uses the default locale
                      
              $this->formatter IntlDateFormatter::create(
                          
              $locIntlDateFormatter::MEDIUMIntlDateFormatter::NONEnull$caltype$fmt
                      
              );
                      return 
              $this;
                  }

                  
              // $fmt: string() see: http://www.icu-project.org/apiref/icu4c/classSimpleDateFormat.html#details
                  
              function setFormat($fmt) {
                      if (!
              $this->formatter->setPattern($fmt)) {
                          throw new 
              Exception('invalid format (pattern) given');
                      }
                      return 
              $this;
                  }

                  
              // Iterator::

                  
              function rewind() {
                      
              $this->cal->set($this->y$this->m1);
                  }

                  
              // return bool()
                  
              function valid() {
                      return 
              $this->=== $this->cal->get(IntlCalendar::FIELD_MONTH);
                  }

                  
              // return a formatted date
                  
              function current() {
                      return 
              $this->formatter->format($this->cal);
                  }

                  
              // return the day of the month as integer (1-based)
                  
              function key() {
                      return 
              $this->cal->get(IntlCalendar::FIELD_DAY_OF_MONTH);
                  }

                  function 
              next() {
                      
              $this->cal->add(IntlCalendar::FIELD_DAY_OF_MONTH1);
                  }


              Die Anwendung ist simpel. Es müssen prinzipiell keine Vorgaben gemacht werden. In dem Fall wird das aktuelle Jahr, der aktuelle Monat, die voreingestellte Formatierung oder|und die voreingestellte Lokalisierung benutzt.
              PHP-Code:
              $month 7;
              $fmt 'yyyy-MM-dd (eeee)'// short ISO-8601 date (day of the week)
              $loc 'fr_FR';

              $cmon CalendarMonth::create($month)
                  ->
              setLocale($loc)
                  ->
              setFormat($fmt);

              foreach (
              $cmon as $dotm => $date) {
                  
              printf('<br />dotm: %s date: %s'$dotm$date);

              Das Ganze lässt sich prinzipiell auch mit DateTime:: oder den Kalender-Funktionen bauen, beiden fehlt aber eine vernünftige Lokalisierungs- und Unicode-Unterstützung.
              Wenn man die Wurst schräg anschneidet, hält sie länger, weil die Scheiben größer sind.

              Kommentar


              • #8
                *grusel* Außer dem Beitrag von tr0y (Alle Tage eines Monats ausgeben) ist da aber nichts Empfehlenswertes dabei.
                Könnte irgendwie der Grund sein, warum ich explizit den Post verlinkt habe...
                Competence-Center -> Enjoy the Informatrix
                PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                Kommentar


                • #9
                  Zitat von Arne Drews Beitrag anzeigen
                  Könnte irgendwie der Grund sein, warum ich explizit den Post verlinkt habe...
                  Stimmt. Jetzt müsste man den nur bei der Google-Suche auch als erstes finden ...
                  Wenn man die Wurst schräg anschneidet, hält sie länger, weil die Scheiben größer sind.

                  Kommentar


                  • #10
                    Ich werde nicht schlau. PHP oder Datenbank?
                    Datenbank:
                    PHP-Code:
                    SELECT  FROM  WHERE YEAR(datefield)=YEAR(?) AND MONTH(datefield)=MONTH(?) 
                    ? = 2012-06-05 (eg)

                    PHP:
                    PHP-Code:
                    $matches array_filter($datelist, function($date) use ($reference) { return (new DateTime($date))->format('Y-m') === $reference; }); 
                    $reference = '2012-06';

                    Und das mit tapatalk.
                    Standards - Best Practices - AwesomePHP - Guideline für WebApps

                    Kommentar


                    • #11
                      Aus der Problembeschreibung von JulianS kann ich nicht so richtig entnehmen, wo sein Problem ist. Aber dies nur nebenbei.
                      fireweasel hat eine interssante Alternative zu DateTime gezeigt, welche eine vernünftige Lokalisierungs- und Unicode-Unterstützung bringen soll.
                      Leider sind die benötigten Klassen nicht immer vorhanden. Bei mir leider nur auf einem Server.
                      Ein Schnelltest dort ergab, daß das obige Script nicht auf Anhieb lief.
                      Fehler:
                      Code:
                      Fatal error: Call to a member function setPattern() on a non-object in ** on line 58
                      Die Methode setPattern schlägt fehl, da kein Objekt vorhanden ist. Die Ursache liegt aber schon in
                      setLocale, wo
                      PHP-Code:
                      $this->formatter IntlDateFormatter::create(
                                  
                      $locIntlDateFormatter::MEDIUMIntlDateFormatter::NONEnull$caltype$fmt
                              
                      ); 
                      kein Objekt liefert, da
                      PHP-Code:
                      $caltype $this->formatter->getCalendar(); 
                      false liefert. Hier hab ich erstmal abgebrochen.

                      Da ich mir nicht sicher bin, ob es am Script oder der Installation liegt, wäre es schön, wenn das obige Script auf einer zweiten Umgebung kurz getestet wird.

                      LG jspit

                      Edit: Man soll nicht kurz vor dem Ziel das Handtuch werfen ..
                      Es fehlte nur setCalendarType

                      PHP-Code:
                      $month 7;
                      $fmt 'yyyy-MM-dd (eeee)'// short ISO-8601 date (day of the week)
                      $loc 'fr_FR'

                      $cmon CalendarMonth::create($month)
                          ->
                      setCalendarType(IntlDateFormatter::GREGORIAN)
                          ->
                      setLocale($loc)
                          ->
                      setFormat($fmt);

                      foreach (
                      $cmon as $dotm => $date) {
                          
                      printf('<br />dotm: %s date: %s'$dotm$date);

                      So kommen keine Fehler mehr.
                      PHP-Klassen auf github

                      Kommentar


                      • #12
                        Zitat von rkr Beitrag anzeigen
                        Ich werde nicht schlau. PHP oder Datenbank?
                        Datenbank:
                        PHP-Code:
                        SELECT  FROM  WHERE YEAR(datefield)=YEAR(?) AND MONTH(datefield)=MONTH(?) 
                        ? = 2012-06-05 (eg)

                        PHP:
                        PHP-Code:
                        $matches array_filter($datelist, function($date) use ($reference) { return (new DateTime($date))->format('Y-m') === $reference; }); 
                        $reference = '2012-06';

                        Und das mit tapatalk.

                        Werde ich gleich ausprobieren. Das war ganz genau das was ich brauchte !!

                        Kommentar


                        • #13
                          Zitat von JulianS Beitrag anzeigen
                          Werde ich gleich ausprobieren. Das war ganz genau das was ich brauchte !!
                          Ich bekomme da keine Ausgabe hmmm ?

                          PHP-Code:
                                              $year "2012";
                                              
                          $month "6";
                                              
                          $count 1;

                                              
                          $tabelle_nehmen mysql_query("SELECT * FROM timetable WHERE YEAR(datefield)= '$year' AND MONTH(datefield)= '$month'");

                                              
                                              while(
                          $ausgabe mysql_fetch_array($tabelle_nehmen)){
                                                              echo 
                          "<td>".$ausgabe['ivn']."</td>"
                                                              echo 
                          "<td>".$ausgabe['datum']."</td>";  
                                                              echo 
                          "</tr>";
                                                              
                          $count ++;  

                                              } 

                          Hier Screens von der Datenbank und der Struktur:
                          http://www.directupload.net/file/d/3...znr72e_png.htm
                          http://www.directupload.net/file/d/3...68zsx4_png.htm

                          Kommentar


                          • #14
                            Was soll YEAR(datefield) bewirken?
                            Competence-Center -> Enjoy the Informatrix
                            PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                            Kommentar


                            • #15
                              Zitat von Arne Drews Beitrag anzeigen
                              Was soll YEAR(datefield) bewirken?
                              Ich dachte das das bewirkt das er aus dem Datum 2012-06-05 Jahr und Datum raus sortiert sowas bräuchte ich halt

                              Kommentar

                              Lädt...
                              X