Обнаружено неверно сформированное числовое значение - PullRequest
101 голосов
/ 26 мая 2011

У меня есть форма, которая передает две даты (начало и конец) в скрипт PHP, который добавит их в БД.У меня проблемы с подтверждением этого.Я продолжаю получать следующие ошибки

Обнаружено неправильное числовое значение

Это когда я использую следующее

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

Но когда яиспользуйте функцию strtotime () , как рекомендовано многими сайтами. Я получаю дату отметки времени unix от 01.01.1970.Любые идеи, как я могу получить правильную дату?

Ответы [ 9 ]

194 голосов
/ 03 октября 2012

Поскольку вы передаете строку в качестве второго аргумента функции date, которая должна быть целым числом.

string date (строка $ format [, int $ timestamp = time ()])

Попробуйте strtotime , что будет Анализировать любое текстовое описание даты и времени на английском языке в метку времени Unix (целое число):

date("d", strtotime($_GET['start_date']));
7 голосов
/ 26 мая 2011

$_GET['start_date'] - это не цифра, это моя ставка, но формат даты не поддерживается strtotime. Вам нужно будет переформатировать дату в рабочий формат для strtotime или использовать комбинацию explode / mktime .

Я мог бы добавить вам пример, если вы будете любезны опубликовать формат, который вы в настоящее время получаете.

6 голосов
/ 05 августа 2016

Просто вы можете решить эту проблему, используя функцию strtotime().

date("d",strtotime($_GET['start_date']));
5 голосов
/ 15 апреля 2014

Я столкнулся с такой же ситуацией (в моем случае со значением даты в настраиваемом поле PHP в представлении Drupal), и для меня работало использование intval вместо strtotime, чтобы превратить значение в целое число - потому что оно в основномбыла метка времени, но в форме строки, а не целого числа.Очевидно, что это не будет иметь место для всех, но это могло бы стоить попробовать.

2 голосов
/ 15 ноября 2016

Это мне очень помогло -

$new_date = date_format(date_create($old_date), 'Y-m-d');
1 голос
/ 23 апреля 2015

Это старый вопрос, но есть еще один тонкий способ, которым это сообщение может произойти.Это очень хорошо объяснено здесь, в документах .

Представьте себе это scenerio:

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

И MyCustomExceptionHandler определяется примерно так:

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

Это фактически вызовет новое исключение в пользовательском обработчике исключений, поскольку класс Exception ожидает число для второго параметра в своем конструкторе, но PDOException мог бы динамически изменить тип возвращаемого значения $e->getCode() наstring.

Обходной путь для этого - определить пользовательский обработчик исключений, например:

class MyCustomExceptionHandler extends Exception {
  public function __construct($e) {
    parent::__construct($e->getMessage());
    $this->code = $e->getCode();
  }
}
0 голосов
/ 09 мая 2019

Передача строки не обязательно является проблемой, если она содержит только цифры.

Еще одна причина, по которой это может произойти, - наличие пробела до или после.Например, "1557399276"

0 голосов
/ 23 марта 2018

Вам необходимо установить часовой пояс с помощью date_default_timezone_set ().

0 голосов
/ 19 марта 2018

Если ошибка возникает во время какого-либо вычисления, дважды проверьте, что значения не содержат запятую (,). Значения должны быть только в формате integer / float.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...