3

少しイライラする問題に直面していますが、簡単な解決策があると感じています。同じ UNIX タイムスタンプを PHPメソッドdateと MySQLFROM_UNIXTIMEメソッドに渡すと、2 つのまったく異なる日付が返されます。PHP が返す値と一致する値を MySQL から返したいと考えています。

これが私が現在使用しているコードとその出力です。提供されるタイムスタンプは日付を表しますTue, 01 Jan 2013 (01/01/2013)。参考までに、ここにフォーマット値を示します。

MySQL 形式

  • %j = 日 (001..366)。
  • %m = 月、数値 (00..12)。
  • %y = 年、数値 (2 桁)。

PHP フォーマット

  • z = 0 から始まる年間通算日 (0 から 365)。
  • m = 先行ゼロ (01 から 12) を付けた月の数値表現。
  • y = 年を表す 2 桁の数字 (例: 99 または 03)。

MySQL クエリ

SELECT FROM_UNIXTIME(1357018200, '%j-%m-%y');
-> 366-12-12

PHPコード

echo date('z-m-y', 1357018200);
-> 0-01-13

お時間をいただきありがとうございます。:)

その他の情報

  • MySQL バージョン: 5.5.23
  • MySQL system_time_zone : CDT
  • MySQL time_zone : システム
  • PHP date_default_timezone_get : アメリカ/シカゴ (CDT)
4

2 に答える 2

2

PHP と MySQL の時間が一致していません。タイムコンバーターの使用:

http://www.4webhelp.net/us/timestamp.php?action=stamp&stamp=1357018200&timezone=-6

「Monday, December 31st 2012, 23:30:00 (GMT -6)」という結果が得られるため、PHP は間違った結果を返しています。PHPが実行されているタイムゾーンを指定しましたが、次を実行して再確認できますか:

date_default_timezone_set ("America/Chicago");
echo date('z-m-y', 1357018200)."\r\n";

「365-12-12」を与える必要があります。

何か別の場所でタイムゾーンが間違って設定されているか、「アメリカ/シカゴ (CDT)」が以前のバージョンの PHP の php.ini ファイルの古い設定である可能性があると思います。

http://php.net/manual/en/timezones.america.phpから許可されているタイムゾーン値のリストを見ると、「アメリカ/シカゴ (CDT)」がリストされていないため、どこに設定されているかを把握する必要があります。他の問題を引き起こす可能性があるため、偽の値。

于 2012-12-09T06:20:16.707 に答える
1

タイムゾーンの問題を整理したら、実際の質問に対する答えは次のとおりです。

function    sqlStyleDate($timestamp){

    $dayOfYear = date("z", $timestamp) + 1;
    $year = date("y", $timestamp);
    $month = date("n", $timestamp);

    $result = "$dayOfYear-$year-$month";

    return $result;
}

echo sqlStyleDate(1357018200)."\r\n";

これにより、PHP の 0 ~ 365 日が変換され、MySQL の 1 ~ 366 日と同じになります。

于 2012-12-09T07:12:16.380 に答える