php - texto - string strip_tags
Un valor numérico no bien formado encontrado (8)
Debe establecer la zona horaria con date_default_timezone_set ().
Tengo un formulario que pasa dos fechas (inicio y final) a un script PHP que las agregará a un DB. Tengo problemas para validar esto. Sigo recibiendo los siguientes errores
Un valor numérico no bien formado encontrado
Esto es cuando uso el siguiente
date("d",$_GET[''start_date'']);
Pero cuando uso la función strtotime () tal como lo recomiendan muchos sitios, obtengo una fecha de marca de tiempo unix del 1/1/1970. ¿Alguna idea de cómo puedo obtener la fecha correcta?
Esta es una vieja pregunta, pero hay otra manera sutil de que este mensaje pueda suceder. Se explica bastante bien aquí, en los documentos .
Imagina este escenario:
try {
// code that triggers a pdo exception
} catch (Exception $e) {
throw new MyCustomExceptionHandler($e);
}
Y MyCustomExceptionHandler
se define aproximadamente así:
class MyCustomExceptionHandler extends Exception {
public function __construct($e) {
parent::__construct($e->getMessage(), $e->getCode());
}
}
Esto disparará una nueva excepción en el manejador de excepciones personalizado porque la clase Exception
espera un número para el segundo parámetro en su constructor, pero PDOException
podría haber cambiado dinámicamente el tipo de retorno de $e->getCode()
a una cadena.
Una solución para esto sería definirle un manejador de excepción personalizado como:
class MyCustomExceptionHandler extends Exception {
public function __construct($e) {
parent::__construct($e->getMessage());
$this->code = $e->getCode();
}
}
Me encontré con esta misma situación (en mi caso con un valor de fecha en un campo PHP personalizado en una vista de Drupal), y lo que funcionó para mí fue usar intval en lugar de strtotime para convertir el valor en un entero, porque básicamente era una marca de tiempo , pero en forma de una cadena en lugar de un número entero. Obviamente, ese no será el caso para todos, pero podría valer la pena intentarlo.
Porque está pasando una cadena como segundo argumento de la función de fecha, que debe ser un número entero.
fecha de cadena (string $ format [, int $ timestamp = time ()])
Pruebe strtotime que analizará cualquier descripción de fecha y hora textual en inglés en una indicación de fecha y hora de Unix (entero):
date("d", strtotime($_GET[''start_date'']));
Si el error es en el momento de cualquier cálculo, verifique que los valores no contengan ninguna coma (,). Los valores deben estar solo en formato entero / flotante.
Simplemente puede resolver este problema usando la función strtotime()
.
date("d",strtotime($_GET[''start_date'']));
$_GET[''start_date'']
no es numérico es mi apuesta, sino un formato de fecha no compatible con strtotime
. Tendrá que volver a formatear la fecha en un formato viable para strtotime o usar una combinación de explode / mktime .
Podría agregar un ejemplo si tiene la amabilidad de publicar el formato que recibe actualmente.
Esto me ayudó mucho -
$new_date = date_format(date_create($old_date), ''Y-m-d'');