2010-02-07 64 views
226

如果我想將結果插入到MySQL datetime類型列中,那麼在PHP中傳遞給date()函數的正確格式是什麼?在datetime中插入MySQL時的PHP date()格式

我一直在嘗試date("Y-M-D G:i:s"),但只是每次插入「0000-00-00 00:00:00」。

+3

由於您目前沒有提供參數,您是否真的需要記錄當前時間? –

回答

489

的問題是,你使用'M''D',這是一個文本表示,MySQL是期待格式2010-02-06 19:30:13

嘗試的數字表示:date("Y-m-d H:i:s")它採用數字等值。

編輯:切換GH,儘管它可能沒有影響,但您可能想要使用帶有前導0的24小時格式。

+15

這必須是任何人需要的最常用的日期時間格式之一。應該是一個內置的php全局或日期函數本身的一部分(例如'c','r') – billynoah

+16

爲什麼這不是我不知道的情況。我必須每次都參考堆棧溢出。單。運行。時間。 – Ash

+5

來這裏比在我的代碼中搜索像這樣的用法來得快。 – MRodrigues

94

從PHP的date() manual page的評論:

<?php $mysqltime = date ("Y-m-d H:i:s", $phptime); ?> 

你有「Y」正確的 - 這是一個完整的一年,但「M」是一個三個字符的月份,而「m」是兩位數月份。 'D'而不是'd'是同樣的問題。 'G'是1或2位數的小時,其中'H'在需要時總是具有前導0。

+1

+1爲最廣泛的解釋和手動鏈接:) –

+1

謝謝@Pekka - 我記得你和我有大致相同的代表 - 你一直很活躍。 –

+1

是啊,我現在工作了很多,這是我最喜歡的消遣之間:)這將再次改變。 –

36

以下是另一種解決方案:如果您將PHP中的日期作爲時間戳,請繞過PHP處理,並讓DB使用FROM_UNIXTIME函數轉換它。

mysql> insert into a_table values(FROM_UNIXTIME(1231634282)); 
Query OK, 1 row affected (0.00 sec) 

mysql> select * from a_table; 

+---------------------+ 
| a_date    | 
+---------------------+ 
| 2009-01-10 18:38:02 | 
+---------------------+ 
+0

這是一個優雅的解決方案。謝謝:) – kta

+0

這是最好的選擇,如果你能處理時間戳。讓超快速的數據庫盡其所能,它可以,而不是等待超慢的PHP! – trejder

+2

@trejder,誰告訴你在mysql中執行它比在php中執行它更快?在PHP中做這件事更好,因爲數據庫通常是瓶頸,你希望**儘快進入和離開。 – Pacerier

19

我用下面的PHP代碼來創建我插入到一個MySQL DATETIME列的變量。

$datetime = date_create()->format('Y-m-d H:i:s'); 

這將保存服務器的當前日期和時間。

7

格式MySQL的日期時間與PHP

$date = "'".date('Y-m-d H:i:s', strtotime(str_replace('-', '/', $_POST['date'])))."'"; 
8

格式時間戳到MySQL DATETIME列:

strftime('%Y-%m-%d %H:%M:%S',$timestamp); 
7
$date_old = '23-5-2016 23:15:23'; 
//Date for database 
$date_for_database = date ("Y-m-d H:i:s", strtotime($date_old)); 

//Format should be like 'Y-m-d H:i:s'`enter code here` 
+2

儘管此代碼可能會回答問題,但提供 有關_why_和/或_how_的其他上下文,則回答問題將顯着提高其長期值 。請[編輯]您的答案以添加一些解釋,並解決您的格式問題。 –

5

沒有必要不使用從PHP之日起()方法,如果你不不使用時間戳。如果dateposted是一個datetime列,可以插入當前日期是這樣的:

$db->query("INSERT INTO table (dateposted) VALUES (now())"); 
+2

感謝您分享這種方法。這是迄今爲止我見過的最簡單的方法。 – Shondeslitch

4

我用這個函數(PHP 7)

function getDateForDatabase(string $date) : string { 
    $timestamp = strtotime($date); 
    $date_formated = date('Y-m-d H:i:s', $timestamp); 
    return $date_formated; 
} 

舊版本的PHP(PHP < 7)的

function getDateForDatabase($date) { 
    $timestamp = strtotime($date); 
    $date_formated = date('Y-m-d H:i:s', $timestamp); 
    return $date_formated; 
} 
+0

我已經投票了你的答案,因爲它在我編輯第一行後工作; '函數getDateForDatabase(字符串$日期):字符串{'''函數getDateForDatabase($日期){'爲什麼類型聲明拋出一個錯誤我不知道足夠的PHP來告訴。 –

+0

「傳遞給getDateForDatabase()的參數1必須是字符串的實例,給定的字符串」 - 我的輸入是字符串, –

+0

謝謝!我真的很想知道這是不是。 –

0

這一直使我瘋狂尋找一個簡單的答案。最後我做了這個函數,它似乎捕獲所有輸入並給出一個正確的或至少有效並可檢查的良好的SQL字符串。如果是1999-12-31這可能是錯誤的,但不會在MySQL中拋出一個錯誤的錯誤。

function MakeSQLDate($date) { 
    if (is_null($date)) { 
     //use 1999-12-31 as a valid date or as an alert 
     return date('Y-m-d', strtotime('1999-12-31')); 
    } 

    if (($t = strtotime($date)) === false) { 
     //use 1999-12-31 as a valid date or as an alert 
     return date('Y-m-d', strtotime('1999-12-31')); 
    } else { 
     return date('Y-m-d H:i:s', strtotime($date)); 
    } 
}