tag:forum.selfhtml.org,2005:/self deustches Datum per PHP überprüfen – SELFHTML-Forum 2020-03-17T16:12:39Z https://forum.selfhtml.org/self/2020/mar/16/deustches-datum-per-php-uberprufen/1767210?srt=yes#m1767210 Bernhard 2020-03-16T16:07:54Z 2020-03-16T16:07:54Z deustches Datum per PHP überprüfen <p>Hallo, ich bin so ziemlich neu auf dem Gebiet der Programmierung. Ich habe ein deutschen Datum das ich über ein Input Feld in einem HTML Formular eingebe. Jetzt möchte ich das deutsche Datum, das so vorliegt 16.03.2020 mittels PHP überprüfen, damit ich es speichern kann.</p> <p>checkdate ( int $month , int $day , int $year )</p> <p>Gibt es so einen Befehl nicht auch für unser deustches Datum.</p> <p>Bernhard</p> https://forum.selfhtml.org/self/2020/mar/16/deustches-datum-per-php-uberprufen/1767213?srt=yes#m1767213 Raketenzeitableser 2020-03-16T16:39:25Z 2020-03-16T16:40:27Z deustches Datum per PHP überprüfen <blockquote> <p>Jetzt möchte ich das deutsche Datum, das so vorliegt 16.03.2020</p> </blockquote> <p>Das ist kein Datum, sondern ein String. Der wieder kann (in PHP) <a href="https://www.php.net/manual/de/function.explode.php" rel="nofollow noopener noreferrer">explodieren</a>.</p> <p>Wenn Du also dafür sorgst, dass der String am Punkt zerbricht, dann hast Du Tag, Monat und Jahr.</p> <pre><code class="block language-php"><span class="token keyword">list</span><span class="token punctuation">(</span> <span class="token variable">$d</span><span class="token punctuation">,</span> <span class="token variable">$m</span><span class="token punctuation">,</span> <span class="token variable">$y</span> <span class="token punctuation">)</span> <span class="token operator">=</span> <span class="token function">explode</span><span class="token punctuation">(</span> <span class="token string single-quoted-string">'.'</span><span class="token punctuation">,</span> <span class="token variable">$sDatum</span><span class="token punctuation">,</span> <span class="token number">3</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token function">checkdate</span> <span class="token punctuation">(</span><span class="token variable">$m</span> <span class="token punctuation">,</span> <span class="token variable">$d</span> <span class="token punctuation">,</span> <span class="token variable">$y</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">echo</span> <span class="token string double-quoted-string">"Oha. Das Datum ist möglicherweise richtig und gültig."</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </code></pre> <ul> <li>Und dann wäre da noch: <a href="https://www.php.net/manual/de/function.strptime.php" rel="nofollow noopener noreferrer">strptime</a>. Damit kann man versuchen, einen String als Datums- und/oder Zeitangabe zu interpretieren.</li> </ul> https://forum.selfhtml.org/self/2020/mar/16/deustches-datum-per-php-uberprufen/1767215?srt=yes#m1767215 Rolf B 2020-03-16T16:42:13Z 2020-03-16T16:42:13Z deustches Datum per PHP überprüfen <p>Hallo Bernhard,</p> <p>das ist eine merkwürdige Frage. Du bekommst vom Browser einen String geschickt (in $_POST oder $_GET). Den musst Du für checkdate ohnehin erstmal zerlegen und in Zahlen umwandeln, bevor Du checkdate nutzen kannst.</p> <pre><code class="block bad language-php"><span class="token function">checkdate</span><span class="token punctuation">(</span><span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'datum'</span><span class="token punctuation">]</span><span class="token punctuation">)</span> </code></pre> <p>würde ohnehin nicht funktionieren.</p> <p>Eine einfache Möglichkeit der Prüfung ist date_create_from_format.</p> <pre><code class="block language-php"><span class="token variable">$datum</span> <span class="token operator">=</span> <span class="token function">date_create_from_format</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"d.m.Y"</span><span class="token punctuation">,</span> <span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'datum'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$datum</span> <span class="token operator">===</span> <span class="token constant boolean">FALSE</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// falsches Datum, Fehlermeldung</span> <span class="token punctuation">}</span> </code></pre> <p>Du musst das Muster d.m.Y exakt wie angegeben verwenden, das steht für 2-stelligen Tag, 2-stelligen Monat und 4-stelliges Jahr. Kleiner Nachteil: die Eingabe "01.13.2020" wird akzeptiert und als 01.01.2021 gedeutet. Und die Eingabe "17.3.2020" wird abgewiesen.</p> <p>Wenn Du das so nicht brauchen kannst, dann musst Du die Eingabe über eine Regex (preg_match) oder mit String-Operationen (substr-Funktion) zerlegen und die Teile in Zahlen umwandeln. Die kannst Du dann in der benötigten Reihenfolge an checkdate übergeben.</p> <p>Tipps:</p> <ul> <li>Zugriff auf einzelne Zeichen geht mit der Index-Schreibweise: $a[2] liefert das dritte Zeichen im String (Indexe beginnen bei 0)</li> <li>Prüfen, ob ein String eine Zahl ist, geht mit der Funktion <a href="https://www.php.net/manual/en/function.is-int.php" rel="nofollow noopener noreferrer">is_int</a> (oder is_integer, die sind synonym)</li> <li>Umwandeln eines Strings in eine Zahl geht mit <a href="https://www.php.net/manual/en/function.intval.php" rel="nofollow noopener noreferrer">intval</a>. intval taugt nicht zum Prüfen auf Zahlen, weil es abbricht wenn keine Ziffer mehr kommt. Bspw. würde "5a" als 5 gedeutet.</li> </ul> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - obstruxi </div> https://forum.selfhtml.org/self/2020/mar/16/deustches-datum-per-php-uberprufen/1767214?srt=yes#m1767214 Der Martin 2020-03-16T16:41:54Z 2020-03-16T16:41:54Z deustches Datum per PHP überprüfen <p>Hallo,</p> <p>ich habe mir mal erlaubt, dein Code-Beispiel zu korrigieren. Kannst deinen Fehler gern über den Versionsvergleich nachvollziehen.</p> <p>Ciao,<br>  Martin</p> <div class="signature">-- <br> Ich stamme aus Ironien, einem Land am sarkastischen Ozean. </div> https://forum.selfhtml.org/self/2020/mar/16/deustches-datum-per-php-uberprufen/1767216?srt=yes#m1767216 Raketenzeitableser 2020-03-16T16:44:09Z 2020-03-16T16:44:09Z deustches Datum per PHP überprüfen <p>Ich hätte noch <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/date" rel="nofollow noopener noreferrer">einen, sehr dringenden Tipp</a>:</p> <pre><code class="block language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>input</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>date<span class="token punctuation">"</span></span><span class="token punctuation">></span></span> </code></pre> <p>Der liefert das Datum als ISO-Datum (YYYY-MM-DD).</p> https://forum.selfhtml.org/self/2020/mar/16/deustches-datum-per-php-uberprufen/1767217?srt=yes#m1767217 Raketendanksager 2020-03-16T16:46:34Z 2020-03-16T16:46:34Z deustches Datum per PHP überprüfen <p>Danke! <a href="https://www.php.net/manual/de/function.list.php" rel="nofollow noopener noreferrer">Natürlich list()</a>, nicht „lauschen“.</p> https://forum.selfhtml.org/self/2020/mar/16/deustches-datum-per-php-uberprufen/1767218?srt=yes#m1767218 Raktenphilosoph 2020-03-16T16:56:50Z 2020-03-16T16:56:50Z deustches Datum per PHP überprüfen <blockquote> <blockquote> <p>ich bin so ziemlich neu auf dem Gebiet der Programmierung</p> </blockquote> </blockquote> <blockquote> <p>das ist eine merkwürdige Frage.</p> </blockquote> <p>Neulinge stellen keine merkwürdigen Fragen. Das kommt anderen, die sich mit der Stur- und Dummheit dieser authistischen Computerdinger abgefunden haben, nur so vor…</p> https://forum.selfhtml.org/self/2020/mar/16/deustches-datum-per-php-uberprufen/1767243?srt=yes#m1767243 TS ts-self@online.de https://bitworks.de 2020-03-17T06:19:12Z 2020-03-17T06:19:12Z deustches Datum per PHP überprüfen <p>Hello,</p> <p>[•••]<br> und wenn Du mir jetzt noch den erlaubten Wertebereich für die Eingangsgröße beschaffen könntest, würdest Du mich für den Tag motivieren.</p> <p>Ich habe danach gesucht und bisher leider nichts gefunden.</p> <p>Glück Auf<br> Tom vom Berg</p> <div class="signature">-- <br> Es gibt nichts Gutes, außer man tut es!<br> Das Leben selbst ist der Sinn. </div> https://forum.selfhtml.org/self/2020/mar/16/deustches-datum-per-php-uberprufen/1767249?srt=yes#m1767249 Bernhard 2020-03-17T08:24:51Z 2020-03-17T08:40:33Z deustches Datum per PHP überprüfen <p>Das Datum geht aber auch !</p> <pre><code class="block language-php"><span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'datum'</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token string single-quoted-string">'42.19.2020'</span><span class="token punctuation">;</span> <span class="token variable">$datum</span> <span class="token operator">=</span> <span class="token function">date_create_from_format</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"d.m.Y"</span><span class="token punctuation">,</span> <span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'datum'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$datum</span> <span class="token operator">===</span> <span class="token constant boolean">FALSE</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// falsches Datum, Fehlermeldung</span> <span class="token punctuation">}</span> </code></pre> https://forum.selfhtml.org/self/2020/mar/16/deustches-datum-per-php-uberprufen/1767255?srt=yes#m1767255 Rolf B 2020-03-17T10:38:32Z 2020-03-17T10:38:32Z deustches Datum per PHP überprüfen <p>Hallo TS,</p> <p>sorry, ich kann deinen Gedanken nicht folgen. Was genau suchst Du?</p> <p>Motivationshilfe bis dahin:</p> <p>... Tom! Tom! <em>klatsch-klatsch-klatsch</em><br> ... Tom! Tom! <em>klatsch-klatsch-klatsch</em></p> <p> <em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - obstruxi </div> https://forum.selfhtml.org/self/2020/mar/16/deustches-datum-per-php-uberprufen/1767250?srt=yes#m1767250 Matthias Apsel matthias.apsel@selfhtml.org https://brückentage.info 2020-03-17T08:42:50Z 2020-03-17T08:42:50Z deustches Datum per PHP überprüfen <p>Hallo Bernhard,</p> <blockquote> <p>Das Datum geht aber auch !</p> <pre><code class="block language-php"><span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'datum'</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token string single-quoted-string">'42.19.2020'</span><span class="token punctuation">;</span> <span class="token variable">$datum</span> <span class="token operator">=</span> <span class="token function">date_create_from_format</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"d.m.Y"</span><span class="token punctuation">,</span> <span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'datum'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$datum</span> <span class="token operator">===</span> <span class="token constant boolean">FALSE</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// falsches Datum, Fehlermeldung</span> <span class="token punctuation">}</span> </code></pre> </blockquote> <p>Ja, ist der 11. August 2021.</p> <p>Bis demnächst<br> Matthias</p> <div class="signature">-- <br> Du kannst das Projekt SELFHTML unterstützen,<br> indem du bei Amazon-Einkäufen <a href="https://smile.amazon.de/ch/314-570-45498" rel="nofollow noopener noreferrer">Amazon smile</a> (<a href="https://www.amazon.de/gp/help/customer/display.html?ie=UTF8&nodeId=202035970%5D" rel="nofollow noopener noreferrer">Was ist das?</a>) nutzt. </div> https://forum.selfhtml.org/self/2020/mar/16/deustches-datum-per-php-uberprufen/1767254?srt=yes#m1767254 Rolf B 2020-03-17T10:32:44Z 2020-03-17T10:32:44Z deustches Datum per PHP überprüfen <p>Hallo Bernhard,</p> <p>ja. Werte für Tag oder Monat, die außerhalb des erlaubten Bereichs sind, werden einfach in den Folgemonat oder ins Folgejahr übertragen. Sinn ist vermutlich mal gewesen, Datumsarithmetik zu vereinfachen. Das geht aber eigentlich mit date_add (oder $date->add) besser.</p> <p>Wie gesagt:</p> <blockquote> <p>Wenn Du das so nicht brauchen kannst</p> </blockquote> <p>dann musst Du die Eingabe von Hand zerlegen und an checkdate übergeben. Wenn Du die Zerlegung alleine nicht hinbekommst, dann zeig mal was Du dafür schon selbst geschafft hast und wir gucken dann weiter.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - obstruxi </div> https://forum.selfhtml.org/self/2020/mar/16/deustches-datum-per-php-uberprufen/1767260?srt=yes#m1767260 Raketenexemplierer 2020-03-17T11:40:08Z 2020-03-17T11:40:08Z deustches Datum per PHP überprüfen <blockquote> <p>Das Datum geht aber auch !</p> <pre><code class="block language-php"><span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'datum'</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token string single-quoted-string">'42.19.2020'</span><span class="token punctuation">;</span> <span class="token variable">$datum</span> <span class="token operator">=</span> <span class="token function">date_create_from_format</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"d.m.Y"</span><span class="token punctuation">,</span> <span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'datum'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$datum</span> <span class="token operator">===</span> <span class="token constant boolean">FALSE</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// falsches Datum, Fehlermeldung</span> <span class="token punctuation">}</span> </code></pre> </blockquote> <p>Das kommt davon, dass date_create_from_format() intern mktime() benutzt. Damit kann man schöne Sachen berechnen wie den 34. Februar, den dann je nach Jahr auf dem richtigen Tag im März landet. Es ist eine tolle Funktion, kein Fehler.</p> <p>Ich hatte schon gefragt, was denn, bitte, Deine Definition eines gültigen Datums sein soll.</p> <p>So ist z.B. ein Topf ohne Deckel nach meiner Ansicht ein gültiger Topf. Es gibt aber Personen oder Einsatzfälle, wo das nicht zutrifft.</p> <p>Das folgende Beispiel (für die Konsole¹) zeigt eine Prüfung auf eine formale Gültigkeit des Datums, gefolgt von zwei weiteren Prüfungen hinsichtlich einer Eingrenzung:</p> <pre><code class="block language-php"><span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token variable">$dateFormat</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'d.m.Y'</span><span class="token punctuation">;</span> <span class="token comment">#Format des Inputs</span> <span class="token variable">$s</span><span class="token operator">=</span><span class="token string single-quoted-string">'02.02.2019'</span><span class="token punctuation">;</span> <span class="token comment"># Der Input</span> <span class="token variable">$sNotBefore</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'01.01.2020'</span><span class="token punctuation">;</span> <span class="token comment"># Nicht vor</span> <span class="token variable">$sNotAfter</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'31.12.2021'</span><span class="token punctuation">;</span> <span class="token comment"># Nicht nach</span> <span class="token comment">#Zerlegen des Datums:</span> <span class="token keyword">list</span><span class="token punctuation">(</span> <span class="token variable">$d</span><span class="token punctuation">,</span> <span class="token variable">$m</span><span class="token punctuation">,</span> <span class="token variable">$y</span> <span class="token punctuation">)</span> <span class="token operator">=</span> <span class="token function">explode</span><span class="token punctuation">(</span> <span class="token string single-quoted-string">'.'</span><span class="token punctuation">,</span> <span class="token variable">$s</span><span class="token punctuation">,</span> <span class="token number">3</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">#checkdate prüft formale Richtigkeit:</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token function">checkdate</span> <span class="token punctuation">(</span><span class="token variable">$m</span> <span class="token punctuation">,</span> <span class="token variable">$d</span> <span class="token punctuation">,</span> <span class="token variable">$y</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">echo</span> <span class="token string double-quoted-string">"Oha. Das Datum \"<span class="token interpolation"><span class="token variable">$s</span></span>\" ist möglicherweise richtig und gültig. Ich prüfe mal weiter:"</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token comment">#Für die nachfolgenden Vergleiche werden die Strings in ein DateTime-Objekt umgewandelt:</span> <span class="token variable">$d</span> <span class="token operator">=</span> <span class="token function">date_create_from_format</span><span class="token punctuation">(</span> <span class="token variable">$dateFormat</span><span class="token punctuation">,</span> <span class="token variable">$s</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$dNotBefore</span> <span class="token operator">=</span> <span class="token function">date_create_from_format</span><span class="token punctuation">(</span> <span class="token variable">$dateFormat</span><span class="token punctuation">,</span> <span class="token variable">$sNotBefore</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$dNotAfter</span> <span class="token operator">=</span> <span class="token function">date_create_from_format</span><span class="token punctuation">(</span> <span class="token variable">$dateFormat</span><span class="token punctuation">,</span> <span class="token variable">$sNotAfter</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment"># DieseDateTime-Objekte kann man vergleichen:</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token variable">$d</span> <span class="token operator">></span> <span class="token variable">$dNotAfter</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">echo</span> <span class="token string double-quoted-string">"Schade. Das Datum <span class="token interpolation"><span class="token variable">$s</span></span> sah gültig aus, liegt aber nach dem <span class="token interpolation"><span class="token variable">$sNotAfter</span></span>."</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">elseif</span> <span class="token punctuation">(</span> <span class="token variable">$d</span> <span class="token operator"><</span> <span class="token variable">$dNotBefore</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">echo</span> <span class="token string double-quoted-string">"Schade. Das Datum <span class="token interpolation"><span class="token variable">$s</span></span> sah gültig aus, liegt aber vor dem <span class="token interpolation"><span class="token variable">$sNotBefore</span></span>."</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> <span class="token keyword">echo</span> <span class="token string double-quoted-string">"Bestätige: Gültiges Datum <span class="token interpolation"><span class="token variable">$s</span></span> zwischen (einschließlich) <span class="token interpolation"><span class="token variable">$sNotBefore</span></span> und <span class="token interpolation"><span class="token variable">$sNotAfter</span></span>."</span><span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> <span class="token keyword">echo</span> <span class="token string double-quoted-string">"Ochnee. Das angebliche Datum \"<span class="token interpolation"><span class="token variable">$s</span></span>\" ist schlicht ungültig."</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </span></code></pre> <p>¹) Für die umständliche Ansicht via Webserver und Browser füge am Anfang <code>header( 'Content-type: text/plain; charset=utf-8' );</code> hinzu. Dann speicher es aber auch in der Kodierung "UTF-8 ohne BOM".</p> https://forum.selfhtml.org/self/2020/mar/16/deustches-datum-per-php-uberprufen/1767252?srt=yes#m1767252 Matthias Apsel matthias.apsel@selfhtml.org https://brückentage.info 2020-03-17T09:52:41Z 2020-03-17T09:52:41Z deustches Datum per PHP überprüfen <p>Hallo Matthias Apsel,</p> <blockquote> <blockquote> <pre><code class="block language-php"><span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'datum'</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token string single-quoted-string">'42.19.2020'</span><span class="token punctuation">;</span> <span class="token variable">$datum</span> <span class="token operator">=</span> <span class="token function">date_create_from_format</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"d.m.Y"</span><span class="token punctuation">,</span> <span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'datum'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> </blockquote> <p>Ja, ist der 11. August 2021.</p> </blockquote> <p>@Bernhard: Das sollte dir bei der Formulierung der Bedingung helfen.</p> <p>Bis demnächst<br> Matthias</p> <div class="signature">-- <br> Du kannst das Projekt SELFHTML unterstützen,<br> indem du bei Amazon-Einkäufen <a href="https://smile.amazon.de/ch/314-570-45498" rel="nofollow noopener noreferrer">Amazon smile</a> (<a href="https://www.amazon.de/gp/help/customer/display.html?ie=UTF8&nodeId=202035970%5D" rel="nofollow noopener noreferrer">Was ist das?</a>) nutzt. </div> https://forum.selfhtml.org/self/2020/mar/16/deustches-datum-per-php-uberprufen/1767261?srt=yes#m1767261 Matthias Apsel matthias.apsel@selfhtml.org https://brückentage.info 2020-03-17T11:46:17Z 2020-03-17T11:46:17Z deustches Datum per PHP überprüfen <p>Hallo Raketenexemplierer,</p> <blockquote> <p>¹) Für die umständliche Ansicht via Webserver und Browser füge am Anfang <code>header( 'Content-type: text/plain; charset=utf-8' );</code> hinzu. Dann speicher es aber auch in der Kodierung "UTF-8 ohne BOM".</p> </blockquote> <p>Oder verwende <a href="http://sandbox.onlinephpfunctions.com/" rel="nofollow noopener noreferrer">http://sandbox.onlinephpfunctions.com/</a> oder ähnliche Anbieter.</p> <p>Bis demnächst<br> Matthias</p> <div class="signature">-- <br> Du kannst das Projekt SELFHTML unterstützen,<br> indem du bei Amazon-Einkäufen <a href="https://smile.amazon.de/ch/314-570-45498" rel="nofollow noopener noreferrer">Amazon smile</a> (<a href="https://www.amazon.de/gp/help/customer/display.html?ie=UTF8&nodeId=202035970%5D" rel="nofollow noopener noreferrer">Was ist das?</a>) nutzt. </div> https://forum.selfhtml.org/self/2020/mar/16/deustches-datum-per-php-uberprufen/1767262?srt=yes#m1767262 RaketenEntzugserscheinungsgeplagter 2020-03-17T11:50:25Z 2020-03-17T11:50:25Z deustches Datum per PHP überprüfen <p><strong>Da manche es nicht besonders mögen, wenn ich die Stegreif-Beispiele poste, hier meine Entschuldigung:</strong></p> <p>Habe aus dem sehr kleinen, derzeit die Nachrichten dominierenden Grund gerade Entzugerscheinungen weil keine zahlenden Opfer für meine Versuche der Wissensvermittlung.</p> <p><strong>Und mir fehlt („<em>Verdammter Mist</em>“), der Beifall.</strong></p> https://forum.selfhtml.org/self/2020/mar/16/deustches-datum-per-php-uberprufen/1767270?srt=yes#m1767270 Gunnar Bittersmann selfhtml@bittersmann.de https://bittersmann.de 2020-03-17T13:36:44Z 2020-03-17T13:36:44Z deustches Datum per PHP überprüfen <p>@@Raketenexemplierer</p> <blockquote> <pre><code class="block language-php"> <span class="token keyword">echo</span> <span class="token string double-quoted-string">"Oha. Das Datum \"<span class="token interpolation"><span class="token variable">$s</span></span>\" ist möglicherweise richtig und gültig. Ich prüfe mal weiter:"</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> </code></pre> </blockquote> <p>Das Escapen von Anführungszeichen im Text sollte nicht notwendig sein. " ist für Code; im Text sollte das Zeichen nicht vorkommen, sondern „ und “ (im Deutschen).</p> <p>Konsequent warst du auch nicht.</p> <p>LLAP </p> <div class="signature">-- <br> Wenn der Faschismus wiederkommt, wird er nicht sagen: Hallo, ich bin der Faschismus! Sondern er wird sagen: Ich nehme die Wahl an. </div> https://forum.selfhtml.org/self/2020/mar/16/deustches-datum-per-php-uberprufen/1767263?srt=yes#m1767263 Raketenexemplierer 2020-03-17T12:03:34Z 2020-03-17T12:03:34Z deustches Datum per PHP überprüfen <blockquote> <p>Oder verwende <a href="http://sandbox.onlinephpfunctions.com/" rel="nofollow noopener noreferrer">http://sandbox.onlinephpfunctions.com/</a> oder ähnliche Anbieter.</p> </blockquote> <p>Das ist ganz schön umständlich… Ich bevorzuge, wegen der Ansicht auf einem Beamer, der Werbefreoheit und der Unabhängigkeit vom Internet, das geniale Programm namens Geany:</p> <p><a href="/images/fc97aea4-6846-11ea-92e2-b42e9947ef30.png" rel="noopener noreferrer"><img src="/images/fc97aea4-6846-11ea-92e2-b42e9947ef30.png?size=medium" alt="" loading="lazy"></a></p> https://forum.selfhtml.org/self/2020/mar/16/deustches-datum-per-php-uberprufen/1767273?srt=yes#m1767273 Raketenexemplierer 2020-03-17T16:12:39Z 2020-03-17T16:12:39Z deustches Datum per PHP überprüfen <blockquote> <p>Das Escapen von Anführungszeichen im Text sollte nicht notwendig sein. " ist für Code; im Text sollte das Zeichen nicht vorkommen, sondern „ und “ (im Deutschen).</p> <p>Konsequent warst du auch nicht.</p> <p>LLAP </p> </blockquote> <p>Dann eben so:</p> <pre><code class="block language-php"><span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token variable">$dateFormat</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'d.m.Y'</span><span class="token punctuation">;</span> <span class="token comment">#Format des Inputs</span> <span class="token variable">$s</span><span class="token operator">=</span><span class="token string single-quoted-string">'2.12.2020'</span><span class="token punctuation">;</span> <span class="token comment"># Der Input</span> <span class="token variable">$sNotBefore</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'01.01.2020'</span><span class="token punctuation">;</span> <span class="token comment"># Nicht vor</span> <span class="token variable">$sNotAfter</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'31.12.2021'</span><span class="token punctuation">;</span> <span class="token comment"># Nicht nach</span> <span class="token comment">#Zerlegen des Datums:</span> <span class="token keyword">list</span><span class="token punctuation">(</span> <span class="token variable">$d</span><span class="token punctuation">,</span> <span class="token variable">$m</span><span class="token punctuation">,</span> <span class="token variable">$y</span> <span class="token punctuation">)</span> <span class="token operator">=</span> <span class="token function">explode</span><span class="token punctuation">(</span> <span class="token string single-quoted-string">'.'</span><span class="token punctuation">,</span> <span class="token variable">$s</span><span class="token punctuation">,</span> <span class="token number">3</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">#checkdate prüft formale Richtigkeit:</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token function">checkdate</span> <span class="token punctuation">(</span><span class="token variable">$m</span> <span class="token punctuation">,</span> <span class="token variable">$d</span> <span class="token punctuation">,</span> <span class="token variable">$y</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">echo</span> <span class="token string double-quoted-string">"Oha : Das Datum „${s}“ ist möglicherweise richtig und gültig."</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span> <span class="token operator">.</span> <span class="token string double-quoted-string">" ⟹ Ich prüfe mal weiter..."</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token comment">#Für die nachfolgenden Vergleiche werden die Strings in ein DateTime-Objekt umgewandelt:</span> <span class="token variable">$d</span> <span class="token operator">=</span> <span class="token function">date_create_from_format</span><span class="token punctuation">(</span> <span class="token variable">$dateFormat</span><span class="token punctuation">,</span> <span class="token variable">$s</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$dNotBefore</span> <span class="token operator">=</span> <span class="token function">date_create_from_format</span><span class="token punctuation">(</span> <span class="token variable">$dateFormat</span><span class="token punctuation">,</span> <span class="token variable">$sNotBefore</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$dNotAfter</span> <span class="token operator">=</span> <span class="token function">date_create_from_format</span><span class="token punctuation">(</span> <span class="token variable">$dateFormat</span><span class="token punctuation">,</span> <span class="token variable">$sNotAfter</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment"># DieseDateTime-Objekte kann man vergleichen:</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token variable">$d</span> <span class="token operator">></span> <span class="token variable">$dNotAfter</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">echo</span> <span class="token string double-quoted-string">"Schade. Das Datum „${s}“ sah gültig aus, liegt aber nach dem <span class="token interpolation"><span class="token variable">$sNotAfter</span></span>."</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">elseif</span> <span class="token punctuation">(</span> <span class="token variable">$d</span> <span class="token operator"><</span> <span class="token variable">$dNotBefore</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">echo</span> <span class="token string double-quoted-string">"Schade: Das Datum „${s}“ sah gültig aus, liegt aber vor dem <span class="token interpolation"><span class="token variable">$sNotBefore</span></span>."</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> <span class="token keyword">echo</span> <span class="token string double-quoted-string">"Gut : Gültiges Datum „${s}“ zwischen (einschließlich) <span class="token interpolation"><span class="token variable">$sNotBefore</span></span> und <span class="token interpolation"><span class="token variable">$sNotAfter</span></span>."</span><span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> <span class="token keyword">echo</span> <span class="token string double-quoted-string">"Ochnee. Das angebliche Datum „${s}“ ist schlicht ungültig."</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </span></code></pre>