date() возвращает 1970-01-01

Я использую jquery datepicker со следующим форматом mm/dd/yyyy, но мне нужно, чтобы он был yyyy-mm-dd для sql db, поэтому я использую это.

   $date  = date("Y-m-d",strtotime($startdate));

со следующим

 $query = "INSERT INTO complete_table ( name, startdate) VALUES ('$_POST[name]', '$date')";

К сожалению, я регистрирую 1970-01-01 в db независимо от того, какой ввод. Любая идея о том, что я делаю неправильно? Большое спасибо за помощь.


person the_arthemis    schedule 29.12.2013    source источник
comment
Попробуйте повторить вывод функции strtotime, если она возвращает 0, это ваша ошибка. Дата является началом временных меток UNIX.   -  person jeroenvisser101    schedule 30.12.2013
comment
Также обратите внимание, что запрос как таковой уязвим для SQL-инъекций. Если вы хотите узнать об этом больше, посетите страницу stackoverflow.com/questions/60174/   -  person jeroenvisser101    schedule 30.12.2013


Ответы (4)


Когда вы получаете 1970-01-01 обратно от date(), это означает, что временная метка неверна. Эта дата является эпохой UNIX.

Когда дело доходит до Javascript (в данном случае средства выбора даты), вы всегда должны убедиться, что то, что вы получаете, на самом деле соответствует вашим ожиданиям. Простое прохождение через strtotime() вызовет проблемы, подобные той, что у вас здесь.

Одним из хороших способов обработки дат является использование расширения datetime. У него есть статический метод DateTime::createFromFormat, который позволит вам анализировать любую дату в любом формате:

// The value from the datepicker
$dpValue = '12/30/2013';

// Parse a date using a user-defined format
$date = DateTime::createFromFormat('d/m/Y', $dpValue);

// If the above returns false then the date
// is not formatted correctly
if ($date === false) {
    header('HTTP/1.0 400 Bad Request');
    die('Invalid date from datepicker!')
}

// Using the parsed date we can create a
// new one with a formatting of out choosing
$forSQL = $date->format('Y-m-d');

// ...
person Sverri M. Olsen    schedule 29.12.2013

поместите формат даты в jquery при инициализации средства выбора даты, например

$( "#id/.class" ).datepicker({dateFormat: 'yy-mm-dd'}); 

Этот формат будет вставлен в базу данных mysql (выполнено на стороне клиента), в противном случае отформатируйте его в коде на стороне сервера.

person Gun2sh    schedule 29.12.2013

$startdate недействителен, и поэтому функция strtotime возвращает значение ниже 86400 (скорее всего, 0), что соответствует количеству секунд в одном дне. Пожалуйста, обратитесь к документации PHP для правильного форматирования $startdate здесь.

person jeroenvisser101    schedule 29.12.2013

Это называется эпохой. Итак, startdate равно нулю.

person Ed Heal    schedule 29.12.2013
comment
$startdate на самом деле не обязательно должен быть равен нулю, но результат функции strtotime равен нулю. Или что-нибудь ниже 86400, если быть точным. - person jeroenvisser101; 30.12.2013
comment
@jeroenvisser101 jeroenvisser101 - Можно предположить, что проблема в том, что startdate имеет значение, равное нулю. - person Ed Heal; 30.12.2013