it-swarm.com.de

Ein nicht gut gebildeter numerischer Wert trifft auf

Ich habe ein Formular, das zwei Datumsangaben (Start und Ende) an ein Skript PHP übergibt, das diese zu einer DB hinzufügt. Ich habe Probleme, dies zu bestätigen. Ich bekomme immer folgende Fehler 

Ein nicht gut gebildeter numerischer Wert trifft auf

Dies ist, wenn ich Folgendes benutze 

date("d",$_GET['start_date']);

Wenn ich jedoch die Funktion " strtotime () " benutze, wie von vielen Websites empfohlen, erhalte ich ein Unix-Zeitstempeldatum vom 1.1.1970.

95
Deviland

Da Sie der zweiten Datumsfunktion einen String als zweites Argument übergeben, der eine Ganzzahl sein sollte.

zeichenfolgedatum (Zeichenfolge $ format [ int $ timestamp = time ()])

Probieren Sie strtotime aus, das eine Beschreibung der englischen textlichen Datums- und Zeitangaben in einen Unix-Zeitstempel (Ganzzahl) durchläuft:

date("d", strtotime($_GET['start_date']));
186
DChaplin

$_GET['start_date'] ist nicht numerisch, aber ein Datumsformat, das von strtotime nicht unterstützt wird. Sie müssen das Datum für strtotime in ein funktionsfähiges Format formatieren oder die Kombination aus explode / mktime verwenden.

Ich könnte Ihnen ein Beispiel hinzufügen, wenn Sie das Format, das Sie gerade erhalten, veröffentlichen möchten.

7

Sie können dieses Problem einfach mit der Funktion strtotime() lösen.

date("d",strtotime($_GET['start_date']));
6
Faisal

Ich bin in die gleiche Situation geraten (in meinem Fall mit einem Datumswert in einem benutzerdefinierten PHP - Feld in einer Drupal-Ansicht). Was für mich funktionierte, war die Verwendung von intval anstelle von strtotime, um den Wert in eine Ganzzahl umzuwandeln Im Grunde war es ein Zeitstempel, aber eher in Form einer Zeichenkette als einer ganzen Zahl. Natürlich ist das nicht für jeden der Fall, aber es könnte einen Versuch wert sein.

5
spidersilk

Das hat mir sehr geholfen -

$new_date = date_format(date_create($old_date), 'Y-m-d');
2
Tushar Walzade

Dies ist eine alte Frage, aber es gibt noch einen anderen subtilen Weg, wie diese Nachricht passieren kann. Es ist ziemlich gut erklärt hier, in den docs .

Stellen Sie sich dieses Szenario vor:

try {
  // code that triggers a pdo exception
} catch (Exception $e) {
  throw new MyCustomExceptionHandler($e);
}

Und MyCustomExceptionHandler ist ungefähr wie folgt definiert:

class MyCustomExceptionHandler extends Exception {
  public function __construct($e) {
    parent::__construct($e->getMessage(), $e->getCode());
  }
}

Dadurch wird tatsächlich eine neue Ausnahmebedingung im benutzerdefinierten Ausnahmehandler ausgelöst, da die Exception-Klasse im Konstruktor eine Nummer für den zweiten Parameter erwartet, aber PDOException möglicherweise den Rückgabetyp von $e->getCode() in eine Zeichenfolge dynamisch geändert hat.

Um dieses Problem zu umgehen, definieren Sie Ihren benutzerdefinierten Ausnahmehandler wie folgt:

class MyCustomExceptionHandler extends Exception {
  public function __construct($e) {
    parent::__construct($e->getMessage());
    $this->code = $e->getCode();
  }
}
1
Parris Varney

Wenn der Fehler zum Zeitpunkt einer Berechnung auftritt, überprüfen Sie, dass die Werte kein Komma (,) enthalten. Werte dürfen nur im Integer/Float-Format vorliegen.

0

Sie müssen die Zeitzone mit date_default_timezone_set () einstellen.

0
AlanP

Das Übergeben einer Zeichenfolge ist nicht unbedingt ein Problem, wenn sie nur Ziffern enthält.

Ein weiterer Grund dafür kann sein, dass Sie vorher oder nachher ein Leerzeichen haben. Z.B. "1557399276"

0
Nuno