我的一个表单上有一个文本框,用户以dd / mm / yy的形式输入日期 但是当我尝试将其插入我的数据库中的一个表中时,它将其输入为 0000-00-00。我怎样才能解决这个问题?我希望它在我的数据库dd / mm / yy
上以这种格式显示这是我的以下插入,其中$ start是数据变量
$query = "INSERT INTO paycheck (payCheckId,jobId,payRate,jobLocation,hoursWorked,startPeriod,empId)
VALUES('','$job_id','$pay_rate','$job_location','$hours','$start','$userId')";
$result = mysqli_query($db, $query); //we make the query
答案 0 :(得分:1)
您可以选择MySQL来执行此操作,也可以让PHP为您执行此操作。
对于MySQL相关解决方案,请检查STR_TO_DATE()函数,对于PHP,函数date()执行此操作。
STR_TO_DATE()
中的用法是:
STR_TO_DATE( '$startPeriod', '%d/%m/%Y' )
因此,查询将是:
INSERT INTO paycheck (payCheckId, jobId, payRate,
jobLocation, hoursWorked, startPeriod, empId)
VALUES( '', '$job_id', '$pay_rate',
'$job_location', '$hours',
STR_TO_DATE( '$startPeriod', '%d/%m/%Y' ), '$userId')
答案 1 :(得分:0)
您需要重新格式化日期,以便MySQL可以阅读它。数据库保存的格式为yyyy-mm-dd
。如果您希望以最初输入的格式显示日期,只需使用date()
函数,如下所示:$date = date("d/m/y", strtotime($dateFromDB));
这可能是一个漫长的方式,并且有更好的方法,但是,你可以创建自己的功能来重新格式化它:
function reformatDate($incorrectFormat) {
list($d, $m, $y) = explode("/", $input);
$todaysYearBeginning = substr(0, 2, date("Y", time()));
if(strlen($d == 1) {
$d = "0" . $d;
}
if(strlen($m == 1) {
$m = "0" . $m;
}
if(strlen($y == 1) {
$y = "0" . $y;
}
return $todaysYearBeginning . $y . "-" . $m . "-" . $d;
}
echo reformatDate("dd/mm/yy");
根据Dream Eater的回答,您可以像DateTime::CreateFromFormat那样使用:
$oldDate = DateTime::createFromFormat('d/m/y', $dateFromDB);
$newDate = $oldDate->format('Y-m-d');