Неверно сформированное числовое значение
У меня есть форма, которая передает две даты (начало и конец) в 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"