2017-11-08 8 views
0

夏時間が1週間以上前に起こったので、データベースが壊れていて、すべてがまだ1時間先です。これを解決し、この問題が今後進行するのを防ぐ方法です。MySQLとPHPの日付と時刻を正しく保存する方法は、夏時間の場合と同じです。

今その2017年11月8日14:16 ESTとの私がヒット夏時間の前に15:16 EST

で出力が2017年11月8日として出てくるdatetime=NOW()を使って何かを送信すると、もちろん、今は一時間ほどでうまくいきました。

私は

date_default_timezone_set('America/Chicago');

を使用して試したし、その後もdate_default_timezone_set('UTC');を試みたが、両方を使用して出力とまったく同じ日付/時刻を表示するに終わる:

echo date('m/d/y g:i A', strtotime($row['ticket_assigned_date'])); 

私は他の方法を見てCONVERT_TZ('2010-01-01 12:00','+00:00','-07:00')を使っているのと同じですが、これは私が本当に避けたいのは、大量のselect文を使用するのがひどいので、私は自分のサイトが全面的にフレンドリーになるようにしなければならないからです。 eirの設定が最善で、PHPで設定されている方が可能ならば、より良い選択肢になります。

また、私は、保存された時間が実際に午後2時16分(EST)にあり、夏時間になると、保存された値が将来何時でも2:16 PM ESTに戻ることを確認します。

+0

'date_default_timezone_set'をお勧めします。 **データベースに時刻を挿入する前に**呼び出さなければならないことに注意してください。また**データベースから**を出力するときに再度呼び出す必要があることを忘れないでください。代わりに、 'php.ini'の' date.timezone'変数を変更することもできます。 –

+0

'date_default_timezone_set'はPHPのみの機能だと思って、MySQLの挿入時に' INSERT datetime = NOW() 'の使用に影響しませんか? – eqiz

+0

正しいですが、PHPの 'date(" Ymd H:i:s ")'のようなものを挿入しても同じ効果が得られ、 'date_default_timezone_set'で作業することができます:) –

答えて

1

PHPのより良い方法があります:

あなたは()関数の時間を使い、常にUTC(秒値) BIGINTタイムスタンプ値として時間を挿入することができます!

$tm = time(); 
echo date('Y-m-d H:i:s', $tm); 

とシンプルなあなたが<現在の時間選択の時間を必要とする場合:

SELECT from data WHERE time < $tm; 

最終日(時間は常に秒):

$tm = time() - 60 * 60 * 24; 
SELECT from data WHERE time > $tm; 
+0

非常に簡単です:) – Smerfik

+0

タイムゾーンなしでは、現時点では現地時間を知ることができません。 –

0

をソリューションは非常に簡単です。すべての日付をUnix時間またはUTCタイムゾーンとユーザーのタイムゾーン名と一緒に保存します。保存されたタイムゾーンを使用すると、ユーザーに問題がなくても、指定された瞬間の現地時間を知ることができます。

関連する問題