-2

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

2 回答 2

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')
于 2013-03-20T00:52:20.550 回答
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');
于 2013-03-20T00:54:12.577 回答