2013-03-20 134 views
-2

我在我的一個表單上有一個文本框,用戶以dd/mm/yy的形式輸入日期,但是當我嘗試將其插入到我的數據庫中的一個表中時,它會進入它作爲 0000-00-00。我怎樣才能解決這個問題?我想讓它顯示在我的數據庫DD/MM/YY這種格式插入到mysql的日期

這是我以下插入其中$開始是數據變量

$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

這其中是日期字段? – hjpotter92 2013-03-20 00:47:11

+0

它將始終以「0000-00-00」的形式存儲在數據庫中。在插入之前,您需要將所有日期轉換爲此格式,然後在顯示它們之前將它們轉換爲所需的任何顯示格式。 – prodigitalson 2013-03-20 00:48:05

+0

startPeriod是日期字段 – 2013-03-20 00:48:50

回答

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') 
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"); 

從夢食者的回答繼,你可以使用DateTime::CreateFromFormat像這樣:

$oldDate = DateTime::createFromFormat('d/m/y', $dateFromDB); 
$newDate = $oldDate->format('Y-m-d'); 
+0

我寧願更喜歡使用[DateTime對象]( http://www.php.net/manual/en/datetime.createfromformat.php)。 – hjpotter92 2013-03-20 00:57:30

+0

考慮這個'PHP 4'友好'版本 – 2013-03-20 01:00:11