Gibt es eine PHP-Funktion, um ein Nulldatum zu testen?

Lesezeit: 5 Minuten

Benutzer-Avatar
H. Ferrence

Suchen Sie nach einer Abkürzung oder einem besseren Weg, um ein Nulldatum (MySQL datetime-Spalte) zu testen, außer:

if ($row['this_date'] == '0000-00-00 00:00:00') echo 'No date set.';

Gibt es eine PHP-Funktion, die das testet? Vielen Dank.

  • Sie sollten wahrscheinlich verwenden NULL statt “Nulldatum”.

    – Krozin

    8. April 2011 um 10:45 Uhr

  • @Crozin NULL ist nicht gleichwertiger Ersatz!

    – Ihr gesunder Menschenverstand

    8. April 2011 um 10:48 Uhr

  • aber NULL kann verwendet werden, wenn die Datumsspalte leer ist, wenn sie ‘0000-00-00 00:00:00’ in der Datenbank gespeichert hat, ist sie nicht leer und daher nicht NULL.

    – Kricke

    8. April 2011 um 10:49 Uhr


  • Ich habe nur angenommen, dass “Nulldatum” im Fall von verwendet wird Datum nicht eingestellt Zustand. Deshalb habe ich vorgeschlagen zu verwenden NULL stattdessen. @Col. Splitter: Fügen Sie einfach eine zusätzliche Bedingung für Nullen hinzu: WHERE date_pub IS [NOT] NULL AND date_pub < NOW().

    – Krozin

    8. April 2011 um 11:22 Uhr


  • @Crozin Ich brauche keine zusätzlichen Bedingungen. NULL ist null und Nullwert ist Nullwert. MISCHEN SIE SIE NICHT

    – Ihr gesunder Menschenverstand

    8. April 2011 um 12:05 Uhr

Wie wäre es mit:

if(strtotime($row['this_date']) == 0) echo 'No date set.';

  • strtotime(‘0000-00-00 00:00:00’) == -62169968592 also nicht immer Null. Ihre Standardzeitzone wirkt sich auf das Ergebnis aus.

    – Heroselohim

    17. September 2019 um 12:37 Uhr

Benutzer-Avatar
Ihr gesunder Menschenverstand

Ich denke, Sie brauchen keine Kurzschrift.
Es ist eine Art Mikrooptimierung.

Sie haben bereits mehr Zeit damit verbracht, sich diese Frage zu stellen, als Sie sich in einem Jahr durchschnittlicher Codierung eine solche Kurzschrift ersparen können. Einfach schreiben und weitermachen.
Haben Sie keine wichtigeren Probleme zu lösen?

Darüber hinaus werden Sie mit einer solchen Kurzschrift verschleiern Ihren eigenen Code.
Ihre jetzige Aussage ist vollkommen klar, heißt es "if date is empty"

aber alle vorgeschlagenen Ausschnitte sind nicht so klar. Wenn Sie Monate später zu diesem Code kommen, werden Sie sich fragen, ob ein solches Codemonster eine besondere Bedeutung hat.

Was du eigentlich wolltest ist Lesbarkeit. Aber du hast es schon. Während alle vorgeschlagenen Abkürzungen dies nicht tun.

  • Hey Oberst. Lange Zeit nichts mehr gehört. Ich erinnere mich, dass du mich vor einiger Zeit in ein paar Posts geschnippt hast. Schön zu sehen, dass Sie immer noch so viel Zeit haben, um auf diejenigen zu schießen, die uns erkunden und lernen möchten. Ihre Kommentare werden immer erwartet … feuern Sie weiter 🙂

    – H. Ferrence

    8. April 2011 um 10:54 Uhr


  • stimme Col. Shrapnel voll und ganz zu. Warum es sich selbst schwerer machen und Zeit verlieren, während es bereits funktioniert

    – Kricke

    8. April 2011 um 10:55 Uhr


  • @Dr the Col ist rau, aber er ist Richtig – das Beispiel, das Sie zeigen, ist bei weitem das lesbarste der Gruppe.

    – Pekka

    8. April 2011 um 12:04 Uhr

  • Ich stimme dir nicht zu. Ich bin alles für die Lesbarkeit, aber wenn sich das Format ändert, müssen Sie eine Zeichenfolge im Code ändern.

    – RonnyKnoxville

    12. April 2016 um 14:14 Uhr

Obwohl Sie wahrscheinlich NULL in Ihrer Datenbank verwenden sollten, wäre ein einfacher Hack:

if(!(int)$row['this_date'])echo'No Date Set.';

Was für einen besseren Weg erwartest du zu finden? es ist schnell wie es ist.

PS Es ist ein Hack, weil ich annehme, dass Sie ein Jahr haben werden. Das heißt, es funktioniert nicht für die Zeichenfolge 0000-00-00 00:00:01

  • Nö, dafür wird es funktionieren 🙂 2000 😕 jetzt ist das ein Jahr mit einem Problem. Aber wir wissen bereits, dass das Jahresformat 4 Zeichen ist!

    – Khez

    8. April 2011 um 10:52 Uhr


  • Wenn date nicht null ist, wird es so etwas wie ‘2011-04-08 12:51:12’ sein, aber – und : sind keine ganzen Zahlen, während Sie es erzwingen. Wird das noch funktionieren? oder verstehe ich das (int) falsch ??

    – Kricke

    8. April 2011 um 10:52 Uhr


  • ja mein schlecht. nur 2000 Jahre in Gefahr. sowieso ist es eine zu schwache Annahme und ein zu vernachlässigbares Ziel

    – Ihr gesunder Menschenverstand

    8. April 2011 um 10:53 Uhr

Da ich ein Fan von regulären Ausdrücken bin, füge ich noch einen hinzu:

if (!preg_match('/[1-9]/', $row['this_date'])) echo 'No date set.';
  • Funktioniert auch mit Zeitstempeln und anderem Zeug.
  • Überprüft offensichtlich nicht die Datumskonsistenz.

if (strtotime($row['this_date'])) echo 'No date set.';

  • hum nein das dauert länger

    – Manuel

    8. April 2011 um 10:48 Uhr

  • äh? Sie gehen wirklich davon aus, dass dies Ihre Leistung stark beeinträchtigen wird?! Uh

    – KingCrunch

    8. April 2011 um 10:53 Uhr

  • @Manu Beispiel, strtotime(‘2020-02-21 16:30:47’) entspricht 1582263047. Wollten Sie in Ihrer Bedingung “false” überprüfen? Auch diese strtotime(‘1969-02-21 16:30:47’) gibt einen negativen Wert aus

    – vkGunasekaran

    24. Februar 2020 um 4:42 Uhr


  • Keine Ahnung, das war vor 10 Jahren.

    – Manuel

    28. Oktober 2021 um 14:31 Uhr

Benutzer-Avatar
berkajunal

Sie können den folgenden Code verwenden

$date="0000-00-00 00:00:00";
if(str_replace(array("-", " ", ":"), "", $date)*1>0){
    echo "DATE";
} else {
    echo "NODATE";
}

  • hum nein das dauert länger

    – Manuel

    8. April 2011 um 10:48 Uhr

  • äh? Sie gehen wirklich davon aus, dass dies Ihre Leistung stark beeinträchtigen wird?! Uh

    – KingCrunch

    8. April 2011 um 10:53 Uhr

  • @Manu Beispiel, strtotime(‘2020-02-21 16:30:47’) entspricht 1582263047. Wollten Sie in Ihrer Bedingung “false” überprüfen? Auch diese strtotime(‘1969-02-21 16:30:47’) gibt einen negativen Wert aus

    – vkGunasekaran

    24. Februar 2020 um 4:42 Uhr


  • Keine Ahnung, das war vor 10 Jahren.

    – Manuel

    28. Oktober 2021 um 14:31 Uhr

Benutzer-Avatar
Daniel

Ich benutze:

if ($timedate->format('U') == -62169962400){
   // 0000-00-00
}

format('U') wird zurückkehren Seconds since the Unix Epoch (January 1 1970 00:00:00 GMT) Die Nummer muss möglicherweise für die Zeitzone angepasst werden

  • Welche Zeitzone? koordinierte Weltzeit ist Die aktuelle Zeit und alle Zeitzonen sind nur Offsets von UTC. Wenn Sie das Datum “Null” für die Zeitzone anpassen möchten, ist es da, weil kein Datum angegeben wurde (und daher beim Speichern nicht an die Zeitzone angepasst werden sollte).

    – Cole Tobin

    27. Juni 2014 um 2:23 Uhr

  • es hängt davon ab, ob Sie verwenden date_default_timezonewenn ich es einstelle America/Edmonton zum Beispiel bekomme ich -62169956768. Ich habe das gefunden $timedate == 0 funktioniert auch, aber diese Antwort wurde genommen.

    – Daniel

    27. Juni 2014 um 2:52 Uhr

  • Das solltest du in deiner Antwort erwähnen.

    – Cole Tobin

    28. Juni 2014 um 1:56 Uhr


1186610cookie-checkGibt es eine PHP-Funktion, um ein Nulldatum zu testen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy