1

出力されている時間から1時間を引く方法を見つけようとしています。私たちのウェブサーバーは私たちの時間より1時間進んでいます。以下を使用して、MySQLデータベースにテーブルが作成された時刻を返します。

ini_set('date.timezone', 'America/Los_Angeles');
$con = mysql_connect('localhost','database','password');  
$db = mysql_select_db('database'); 
$sql = mysql_query("SHOW TABLE STATUS WHERE `name`=\"initm\"");  
$foo = mysql_fetch_array($sql);  
$ts = strtotime($foo['Create_time']);
echo "<h3>Last Updated ";
echo date('m/d/Y g:i a T', $ts);
echo "</h3>";  

時間を差し引いてみたら$ts = strtotime($foo['Create_time']-3600);

最終更新日1969年12月31日午後4時PSTを返します。UNIXタイムスタンプから減算していることを理解しています。UNIXタイムスタンプは、表の時刻ではなく、1970年1月1日からの秒数として定義されています。

追加してみましini_set('date.timezone', 'America/Los_Angeles');たが、出力されるタイムゾーンが変わるだけです。

アドバイスをいただければ幸いです。PHPとMySQLの初心者。

4

3 に答える 3

2

strtotimeパラメータが文字列であると仮定し、それを秒に変換します。変換後に減算を行う必要があります。

$ts = strtotime($foo['Create_time'])-3600;
于 2012-09-14T20:17:16.533 に答える
1

なぜだめですか :

$query = "SET time_zone = '-6:00'";

これにより、 と同じ方法で構成が設定されますSET charset utf8

于 2012-09-14T20:13:39.083 に答える
1
SELECT UNIX_TIMESTAMP(Create_time) - 3600 ...

これは、PHP および MySQL の日付/時刻処理システムを何度も往復するよりもはるかに簡単です。

ただし、 strtotime は無効な結果を提供しているため、保存してCreate_timeいるものは実際にはネイティブの mysql データ/時刻値ではなく、おそらく文字列としての奇妙な非標準日付値であると推測しています。これは、strtotime() がブール値の FALSE を返して失敗を示していることを意味し、PHP にその false を整数に変換させて0、「マイナス 3600」の計算を処理させます。

このような事態を防ぐために、通常は常にネイティブの形式/型で保存する必要があります。Native では、処理にネイティブ機能を使用できます。カスタムフォーマットは痛み/苦しみを意味します

于 2012-09-14T20:13:46.507 に答える