2011-07-22 129 views
42

我有一個日期字段中使用此代碼的PHP:將PHP的日期到MySQL格式

$date = mysql_real_escape_string($_POST['intake_date']); 

如何轉換這MySql的格式0000-00-00納入分貝。是否符合以下條件:date('Ymd'strtotime($ date);我之所以問這個問題,是因爲我嘗試過這種變化,而且我似乎無法使其工作,或者顯示爲1970或其他變體。那非常感謝

+7

'$ _POST ['intake_date']'現在格式化了嗎?我猜MySQL列的類型是'DATE'? – Bojangles

+0

是一個unix時間戳的原始日期嗎? (139293929看的東西) – Jakub

+0

@jam它是日期時間格式 – bollo

回答

124
$date = mysql_real_escape_string($_POST['intake_date']); 

1.如果你的MySQL列DATE類型:

$date = date('Y-m-d', strtotime(str_replace('-', '/', $date))); 

2.如果你的MySQL列是DATETIME類型:

$date = date('Y-m-d H:i:s', strtotime(str_replace('-', '/', $date))); 

你還沒有上班strototime(),因爲它不會使用破折號-分隔符,它會嘗試做一個減法。


更新,您的日期的格式不能使用strtotime()的方式,使用此代碼來代替:

$date = '02/07/2009 00:07:00'; 
$date = preg_replace('#(\d{2})/(\d{2})/(\d{4})\s(.*)#', '$3-$2-$1 $4', $date); 
echo $date; 

輸出:

2009-07-02 00:07:00 
+0

請看我上面的評論w00te。謝謝 – bollo

+0

@bollo:你有沒有試過我的代碼呢?給我一個樣本日期時間來測試,但我懷疑它會工作得很好。 – Shef

+0

它仍在倒轉d&m。例如,使用你的代碼,轉換後,這是什麼出現在分貝:2009-02-07 00:07:00但它應該是2009-07-02 00:07:00。 firbug的回覆顯示爲02/07/2009 00:07:00。謝謝 – bollo

4

您正在尋找MySQL的功能FROM_UNIXTIME()UNIX_TIMESTAMP()

使用它們在你的SQL,如:

mysql> SELECT UNIX_TIMESTAMP(NOW()); 
+-----------------------+ 
| UNIX_TIMESTAMP(NOW()) | 
+-----------------------+ 
|   1311343579 | 
+-----------------------+ 
1 row in set (0.00 sec) 

mysql> SELECT FROM_UNIXTIME(1311343579); 
+---------------------------+ 
| FROM_UNIXTIME(1311343579) | 
+---------------------------+ 
| 2011-07-22 15:06:19  | 
+---------------------------+ 
1 row in set (0.00 sec) 
13

這個網站有兩個非常簡單的解決方案 - 只是檢查代碼,我提供的描述,以防萬一你想他們 - 節省點擊一些。

http://www.richardlord.net/blog/dates-in-php-and-mysql

1.One常見的解決方案是將日期存儲在DATETIME領域和使用PHP的日期()和的strtotime()函數PHP時間戳和MySQL日期時間之間轉換。這些方法的用法如下 -

$mysqldate = date('Y-m-d H:i:s', $phpdate); 
$phpdate = strtotime($mysqldate); 

2.我們的第二個選擇是讓MySQL完成這項工作。 MySQL有我們可以用來在我們訪問數據庫的地方轉換數據的函數。 UNIX_TIMESTAMP將從DATETIME轉換爲PHP時間戳,而FROM_UNIXTIME將從PHP時間戳轉換爲DATETIME。這些方法在SQL查詢中使用。因此,我們插入和使用更新日期查詢這樣的 -

$query = "UPDATE table SET 
    datetimefield = FROM_UNIXTIME($phpdate) 
    WHERE..."; 
$query = "SELECT UNIX_TIMESTAMP(datetimefield) 
    FROM table WHERE..."; 
+0

我使用此代碼︰$ date = mysql_real_escape_string($ _ POST ['intake_date']); $ newdate = date('Y-m-d H:i:s',strtotime($ date));但它似乎是在數據庫00:00:00將它放在YYYY-dd-mm中。這個日子和月份似乎被扭轉。謝謝 – bollo

+0

我不完全確定爲什麼這會發生誠實 - 我會考慮它,並回到你身邊,除非有人擊敗我 - 對此感到遺憾! –

1
function my_date_parse($date) 
{ 
     if (!preg_match('/^(\d+)\.(\d+)\.(\d+)$/', $date, $m)) 
       return false; 

     $day = $m[1]; 
     $month = $m[2]; 
     $year = $m[3]; 

     if (!checkdate($month, $day, $year)) 
       return false; 

     return "$year-$month-$day"; 
} 
4

如果intake_date是一些常見的日期格式,你可以使用date()strtotime()

$mysqlDate = date('Y-m-d H:i:s', strtotime($_POST['intake_date'])); 

然而,這隻會如果日期工作格式被strtotime()接受。有關支持的格式,請參閱it's doc page

1

如果你知道格式日期在$ _POST [intake_date]中,您可以使用爆炸獲取年,月和時間,然後連接以形成有效的mySql日期。例如,如果您得到的日期有點像1988年12月15日,你可以做這樣的

$date = explode($_POST['intake_date'], '/'); 
    mysql_date = $date[2].'-'$date[1].'-'$date[0]; 

但如果你有有效日期date( 'Y-M-d' 的strtotime($日期));也應努力

3

如果你在格式DD/MM/YYYY一個發佈日期,請使用以下:

$date = explode('/', $_POST['posted_date']); 
$new_date = $date[2].'-'.$date[1].'-'.$date[0]; 

如果你擁有了它在MM/DD/YYYY,只是改變了下聯:

$new_date = $date[2].'-'.$date[0].'-'.$date[1]; 
1

PHP 5.3具有任何格式指定函數來創建和DateTime對象格式化:

$mysql_date = "2012-01-02"; // date in Y-m-d format as MySQL stores it 
$date_obj = date_create_from_format('Y-m-d',$mysql_date); 
$date = date_format($date_obj, 'm/d/Y'); 
echo $date; 

輸出:

01/02/2012 

MySQL也可以通過插入時/更新,並且DATE_FORMAT()查詢時使用STR_TO_DATE()功能控制的格式。

$php_date = "01/02/2012"; 
$update_query = "UPDATE `appointments` SET `start_time` = STR_TO_DATE('" . $php_date . "', '%m/%d/%Y')"; 
$query = "SELECT DATE_FORMAT(`start_time`,'%m/%d/%Y') AS `start_time` FROM `appointments`";