2009-04-13 8 views
2

私はMySQLのテーブルにこの形式の日付を表すDATE列を持っています:YYYY-MM-DD。PHP/MySQL:YYYY-MM-DDからDD月、YYYYに変換しますか?

私はデータベースからPHPを使用して日付を取得しますが、DD Month、YYYYのように表示します。

「2009年4月13日」から「2009年4月13日」までです。

魔女はそれを行う最善の方法ですか? (私はDBから日付を取得する方法を知っています。変換する方法だけを知る必要があります)

また、スペイン語で月の名前を表示する必要があります。 strplcなどを使って毎月翻訳することなくそれを行う方法がありますか?

私はプログラミングに慣れていませんので、詳しくお尋ねください。

ありがとうございました!

答えて

7

MySQLのDATE_FORMAT()機能を参照してください。私はあなたがそれを行うための最良の方法だと思います。

また、あなたはこれを行うことができます。

  • はその後dateを使用して時刻をフォーマットするUNIXタイム
  • に変換するために、PHPでDB
  • 使用strtotimeから、あなたの日付を取得します。

日付()を使用すると、スペイン語でロケールをsetlocaleに設定すると、スペイン語で月名を取得できます。

0

最も簡単な方法は、strtotime()関数を使用して、入力をUNIXタイムスタンプに正規化することです。

次に、関数を使用して、任意の形式で日付を出力します。 date()の第2引数としてUNIXのタイムスタンプを渡す必要があることに注意してください。

0

私はPHPでそれをやっていますが、MySQLではそうしていません。 PHPのDateTime::formatを使用しても問題はありますか?

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 = ?"); 
... 
1

は、MySQLが照会次のコマンドを実行します:

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

ありがとうございました。どのようにSET lc_time_namesを次のmysqliクエリに挿入できますか? \t \t \t $ sql = 'SELECT personID、name、DATE_FORMAT(persons.birthdate、 "%d de%M、%Y")、出生地、countryID FROM personここでpersonID =?'; – Jonathan

0

まだ言及していない別のオプション:

SQL:

SELECT UNIX_TIMESTAMP(date) FROM table 

PHPを

0

個人的には、私はUNIXのタイムスタンプ形式の日付ストレージのためにMySQLで整数データ型を使用したいと考えています。私はその整数のすべての処理をPHPに任せます。テーブルやクエリをできるだけシンプルに保つことは、常に私に役立ちました。主に、私が書くコードでは、日付には何らかの計算が行われています。これはすべてPHP側で行われ、常にUNIXのタイムスタンプ形式で行われます。UNIXのタイムスタンプ形式以外の日付の格納や取得は、エラーが発生してクエリがモジュール化されないようにするための別のステップを意味します。日付の書式設定は、表示される前の最後の1分まで残すのが最善です。それは私の意見ですが、抽出後にDB値を処理できない極端な状況がない限り、日付はSQL側でフォーマットしてはいけません。

簡単な例:あなたのMySQLで

<?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固有の機能であり、将来的には移植可能でない可能性があることに注意してください。

関連する問題