web-dev-qa-db-ja.com

MySQLのdatetimeから別の形式に変換する PHP

MySQLにはdatetimeカラムがあります。

PHPを使用して mm/dd/yy H:M(AM/PM) のように表示に変換するにはどうすればよいですか?

420
Tim Boland

MySQLから取得した日付を要求された形式に変換するには(mm/dd/yy H:M (AM/PM)):

// $datetime is something like: 2014-01-31 13:05:59
$time = strtotime($datetimeFromMysql);
$myFormatForView = date("m/d/y g:i A", $time);
// $myFormatForView is something like: 01/31/14 1:05 PM

フォーマットを調整するには、 PHP日付フォーマットオプション を参照してください。

292
Tim Boland

日付をMySQLフォーマットに正規化する方法を探しているなら、以下を使用してください。

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

$phpdate = strtotime( $mysqldate )は文字列を受け取り、その文字列をunixタイムスタンプに変える一連の発見的方法を実行します。

$mysqldate = date( 'Y-m-d H:i:s', $phpdate )行はそのタイムスタンプとPHPの date 関数を使ってそのタイムスタンプをMySQLの標準的な日付フォーマットに戻します。

編集者注 :この答えは混乱した言い回しのある最初の質問と、この答えが「今ある質問に直接答えなかったとしてもこの答えが提供した一般的なGoogleの有用性のためにここにある」)

489
kta

あなたがPHP 5を使っているならば、あなたも試すことができます

$oDate = new DateTime($row->createdate);
$sDate = $oDate->format("Y-m-d H:i:s");
104
enobrev
$valid_date = date( 'm/d/y g:i A', strtotime($date));

参照: http://php.net/manual/en/function.date.php

39
Tony Stark

最後にPHP 5.3以降の正しい解決策:

$date = \DateTime::createFromFormat('Y-m-d H:i:s', $mysql_source_date);
echo $date->format('m/d/y h:i a');
21
Hasenpriester

もっと簡単な方法は、PHPではなくMySQLクエリで直接日付をフォーマットすることです。 DATE_FORMATのMySQLマニュアルエントリ を参照してください。

あなたがPHPでそれをしたいのであれば、あなたは date 関数が必要ですが、あなたは最初にあなたのデータベース値をタイムスタンプに変換しなければなりません。

12
flash

全部忘れなさい。ただ使用してください:

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

MySQLに格納するためにPHP内のDateTimeオブジェクトを正しくフォーマットするには、MySQLが使用する標準フォーマット、つまり ISO 8601 を使用します。

PHPは、バージョン5.1.1以降このフォーマットを定数として格納しています。毎回手動で文字列を入力するのではなく、使用することを強くお勧めします。

$dtNow = new DateTime();
$mysqlDateTime = $dtNow->format(DateTime::ISO8601);

これと他のPHP DateTime定数のリストは http://php.net/manual/en/class.datetime.php#datetime.constants.types にあります。

9
Greg

これはSQLクエリのフィールドをフォーマットする必要があります。

SELECT DATE_FORMAT( `fieldname` , '%d-%m-%Y' ) FROM tablename
8
riz

date 関数を使用してください。

<?php
    echo date("m/d/y g:i (A)", $DB_Date_Field);
?>
7
Gustavo Carreno

MySQLの日時設定によって異なります。通常: 2011-12-31 07:55:13 形式。この非常に単純な関数は魔法をやるはずです:

function datetime()
{
    return date( 'Y-m-d H:i:s', time());
}

echo datetime(); // display example: 2011-12-31 07:55:13

または質問に合わせてもう少し進んでください。

function datetime($date_string = false)
{
    if (!$date_string)
    {
        $date_string = time();
    }
    return date("Y-m-d H:i:s", strtotime($date_string));
}
5
tfont
SELECT 
 DATE_FORMAT(demo.dateFrom, '%e.%M.%Y') as dateFrom,
 DATE_FORMAT(demo.dateUntil, '%e.%M.%Y') as dateUntil
FROM demo

PHPコード内のすべての関数を変更したくない場合は、予想される日付形式を表示するには、ソース(データベース)で変更します。

上記の例のように、 as 演算子を使用して行に名前を付けることが重要です(dateFromとして、as dateUntilとして)。あなたがそこに書いた名前は名前であり、行はあなたの結果の中で呼ばれるでしょう。

この例の出力は次のようになります。

[日にち、数値(0..31)]。[月名(1月、12月)]。[年、数値、4桁]

例:5.August.2015

選択した区切り記号を使用してドットを変更し、その他の日付形式については DATE_FORMAT(date、format) 関数を確認してください。

5
Rangel

また、クエリにUnixタイムスタンプとして時刻を返させることもできます。それはstrtotime()を呼び出す必要性を取り除き、PHP側で物事を少し集中させないようにするでしょう...

select  UNIX_TIMESTAMP(timsstamp) as unixtime from the_table where id = 1234;

それからPHPでは、date()関数を使って好きな方法でフォーマットしてください。

<?php
  echo date('l jS \of F Y h:i:s A', $row->unixtime);
?>

または

<?php
  echo date('F j, Y, g:i a', $row->unixtime);
?>

MySQLDATE_FORMAT関数を使用するのではなく、このアプローチが気に入っています。これは、同じクエリを再利用してデータを取得し、PHPのフォーマットを変更できるためです。

日付がUI内でどのように見えるかを変更するためだけに2つの異なるクエリを使用するのは面倒です。

3
phatduckk

あなたは、Unixタイムスタンプに返されない日付に関する問題を抱えることができるので、これは私のために働きます...

return date("F j, Y g:i a", strtotime(substr($datestring, 0, 15)))
1
matt.j.crawford

これは動作します...

echo date('m/d/y H:i (A)',strtotime($data_from_mysql));
1
Mihir Vadalia

PHPバージョン4.4.9およびMySQL 5.0を使用して、これは私のために働きました:

$oDate = strtotime($row['PubDate']);
$sDate = date("m/d/y",$oDate);
echo $sDate

PubDateMySQL の列です。

0
user216189