web-dev-qa-db-ja.com

PHPを使用したSQLタイムスタンプのフォーマット

タイムスタンプフィールドを持つmySQLデータベースがあります。私がテストしている間、それは現在1つのエントリしかありません、それはです

2010-02-20 13:14:09

私はデータベースからプルして使用しています

echo date("m-d-Y",$r['newsDate'])

私の最終結果は

12-31-69

誰もが理由を知っていますか?

編集:editedit:その編集は無視してください... notepad ++のFTPアドオンがタイムアウトになり、残念ながら同期できないときにエラーが表示されません。

21

date 関数は、2番目のパラメーターとして NIXタイムスタンプ を想定しています-つまり、DBから取得した日付をUNIXタイムスタンプに変換する必要があります。 strtotime を使用して実行できます。

$db = '2010-02-20 13:14:09';
$timestamp = strtotime($db);
echo date("m-d-Y", $timestamp);

そして、あなたは得るでしょう:

02-20-2010


あなたは'2010-02-20 13:14:09'文字列からdate関数へ;その文字列は有効なUNIXタイムスタンプではありません。

'12-31-69' おそらく 1970-01-01、あなたのロケールで;および1970-01-01はエポック-0 UNIXタイムスタンプに対応する日付です。

53
Pascal MARTIN

手始めに、php date()関数は2番目の変数として秒を期待しています。そのため、日付が正しく表示されない理由が説明されます。この問題について source を確認してください。

これで問題の答えが得られ、PHPを取得してSQLタイムスタンプから日付を正しくフォーマットするには、クエリを少し変更するだけです...

SELECT author, `when`

に変更...

SELECT author, UNIX_TIMESTAMP(`when`)

次に、PHP日付関数を使用し、上記のSQLクエリの結果を格納する変数を指定します。

4
Urda

代わりにMySQLの date_format() 関数を使用できます。

SELECT date_format(timestampfield, '%m-%d-%Y') FROM table etc....

これにより、タイムスタンプをUNIX時間に往復し、PHPで通常の日付文字列に戻す必要がなくなります。 2つではなく1つの日時フォーマット呼び出し。

1
Marc B

これは初心者に役立つと思います:

mYSQL形式から日付から1時間の基本的な減算の例:

$to='2013-25-10 22:56:00'; //curr time
$timestamp = strtotime($to); //convert to Unix timestamp
$timestamp = $timestamp-3600; //subtract 1 hour (3600 this is 1 hour in seconds)
echo date("Y-m-d H:i:s",$timestamp); //show new date
1
qant

わかりました、私は1週間これと格闘していました(もっと長くなりましたが、それから一休みしました)。

テーブルに2つの特定のフィールドがあります

 creationDate>タイムスタンプ> current_timestamp 
 editDate>タイムスタンプ> current_timestamp 

彼らは1969年12月31日、またはまったく何も引き出していません...迷惑...非常に迷惑

mysqlのクエリで私はしました:

            unix_timestamp(creationDate) AS creationDate
            unix_timestamp(editDate) AS editDate

pHP変換で私はしました:

    $timestamp = $result_ar['creationDate'];
    $creationDate = date("Y-M-d (g:i:s a)", $timestamp)
            echo($creationDate);

    $editstamp = $result_ar['editDate'];
    $editDate = date("Y-M-d (g:i:s a)", $editstamp)
            echo($editDate);

これは私が戻るための私の問題を解決しました

            2010-Jun-28 (5:33:39 pm)
            2010-Jun-28 (12:09:46 pm)

それぞれ。

これが誰かを助けることを願っています。

0

編集:チェック後、MySQLはPHPにtimestampを文字列として返すようです。そのため、この答えは偽でした:)

とにかく、1969年に日付を取得する理由は、UNIXのゼロ時間をUTCから現地時間に変換しているためです。 UNIX時間は1970年からの秒数です。したがって、値0は1970を意味します。プロベイビーは、GMT-6のような負のオフセットを持つタイムゾーンに住んでおり、最終的に31-12-69になります。

0
Andomar