Неверно сформированное числовое значение

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

Неверно сформированное числовое значение

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

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

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

Ответ 1

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

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

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

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

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

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

Ответ 5

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

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

Ответ 6

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

Представьте себе этот сценарий:

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() на строка.

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

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

Ответ 7

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

Ответ 8

Вам нужно установить часовой пояс, используя date_default_timezone_set().

Ответ 9

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

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