-2

フォームの 1 つにテキスト ボックスがあり、ユーザーは dd/mm/yy の形式で日付を入力しますが、データベースのテーブルの 1 つに挿入しようとすると、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 に答える