将日期插入mysql

时间:2013-03-20 00:45:41

标签: php mysql

我的一个表单上有一个文本框,用户以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

2 个答案:

答案 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');