2009-04-13 58 views
2

我在MySQL表中有一個DATE列,用這種格式表示日期:YYYY-MM-DD。PHP/MySQL:從YYYY-MM-DD轉換爲DD Month,YYYY?

我想要使用PHP從數據庫中檢索日期,但是像這樣顯示它:DD Month,YYYY。例如,從'2009年4月13日'至'2009年4月13日'。

女巫是最好的方式嗎? (我知道如何從數據庫中獲取日期,我只需要知道如何轉換它)

我還需要以西班牙語顯示月份名稱。有沒有辦法做到這一點,而不使用strplc或類似的東西翻譯每個月?

我是編程新手,請詳細說明。

謝謝!

回答

7

請參考DATE_FORMAT()函數在MySQL中。我想這是你做這件事的最好方法。

此外,您還可以讓這個:

  • 從DB
  • 使用strtotime在PHP中獲取您的日期,轉換爲UNIX時間
  • 然後使用date格式化時間。

通過使用date(),您將能夠用西班牙語獲取月份名稱,當您在PHP中使用setlocale設置您的語言環境時。

0

最簡單的方法是使用strtotime()函數將輸入標準化爲UNIX時間戳。

然後使用date()函數以您希望的任何格式輸出日期。請注意,您需要將UNIX時間戳作爲第二個參數傳遞給date()。

0

我會這樣做在PHP中,而不是在MySQL中。使用PHP的DateTime::format會給你帶來麻煩嗎?

1

執行下面的MySQL查詢:

SET lc_time_names = 'es_ES'; 
SELECT DATE_FORMAT(t.date,'%e de %M, %Y') FROM your_table t ... 

用的MySQLi這將是:

$mysqli->query("SET lc_time_names = 'es_ES'"); 
$stmt = $mysqli->prepare("SELECT DATE_FORMAT(t.date,'%e de %M, %Y') FROM your_table t ...where id = ?"); 
... 
+0

謝謝。如何將SET lc_time_names插入到下一個mysqli查詢中? \t \t \t $ sql ='SELECT personID,name,DATE_FORMAT(persons.birthdate,「%d de%M,%Y」),birthplace,countryID FROM persons where personID =?'; – Jonathan 2009-04-20 16:19:59

0

沒有提到的另一個選項:

SQL:

SELECT UNIX_TIMESTAMP(date) FROM table 

PHP :

print date('your format', $timestamp_from_the_db); 
0

就我個人而言,我喜歡在UNIX時間戳格式中使用MySQL中的整數數據類型進行日期存儲。我把這個整數的所有處理都留給PHP。保持表格和查詢儘可能簡單一直爲我服務。主要是,在我寫的代碼中,日期對他們做了某種計算。這一切都在PHP端完成,並始終以UNIX時間戳格式完成。使用UNIX時間戳格式以外的任何其他方式存儲或檢索日期只是意味着錯誤進入另一個步驟,並使查詢更少模塊化。如何格式化日期最好保留到顯示前的最後一分鐘。這只是我的看法,但除非在極端情況下無法在提取之後處理DB值,否則日期不應格式化爲SQL端。

一個簡單的例子:

<?php 

$date = now(); 
$dueDate = $date + 60*60*24*7; // One week from now 

$sqlInsert = "INSERT INTO reports SET `dueDate` = $date"; 
$resInsert = mysql_query($sqlInsert); 

$sqlSelect = "SELECT `dueDate` FROM reports"; 
$resSelect = mysql_query($sqlSelect); 
$rowSelect = mysql_fetch_array($resSelect); 

$DB_dueDate = $rowSelect['dueDate']; 

$daysUntilDue = ($DB_dueDate - now())/60*60*24; 

$formattedDueDate = date("j F, Y", $DB_dueDate); 

?> 

The report is due on <?=$formattedDueDate?>. That is <?=$daysUntilDue?> from now. 
1

您也可以跳過使用UNIX_TIMESTAMP(日)的strtotime()的一部分在你的MySQL選擇。但請記住,這是一個MySQL特定的功能,將來可能不能移植。

相關問題