2016-06-25 10 views
1

私はスリランカに住んでいます。私は無効なログインが行われた現在の日付と時刻を記録するこのコードを持っています。PHP mySQL CURRENT_TIMESTAMP不正な時刻がcPanelのデータベースに表示される

$insert_query = "INSERT INTO LoginAttempt(IpAddress, LoginAt) VALUES('". $_SERVER['REMOTE_ADDR']. "', CURRENT_TIMESTAMP)"; 

教育目的で無料のウェブホスティングサービスであるhostinger.co.ukにアップロードしました。

テーブルに正常に挿入されました。それは正しい日付を示しています。しかし、時間は実際の時間よりも約5時間30分です。 cPanelでタイムゾーンを変更する方法はありますか?またはPHPスクリプトでプログラムで変更する方法はありますか?

私が試したことは何ですか?

1)これを追加します。しかし動作しません! date_default_timezone_set( 'アジア/コロンボ');

もう1つの魂の使用DATE_ADDは、特定の欠落時間を追加する機能があります。

あなたの別のアイデアは何ですか?ありがとう

MySQLテーブル;

CREATE TABLE LoginAttempt(
    LoginId INT NOT NULL AUTO_INCREMENT, 
    IpAddress VARCHAR(20) NOT NULL, 
    LoginAt DATETIME NOT NULL DEFAULT NOW(), 
    PRIMARY KEY(LoginId) 
); 

解決した解決策!!!!

$insert_query = "INSERT INTO LoginAttempt(IpAddress, LoginAt) VALUES('". $_SERVER['REMOTE_ADDR']. "', CONVERT_TZ(NOW(), 'UTC', 'Asia/Colombo'))"; 
+1

datetimeを更新するか、「SELECT」クエリのみを更新しますか? –

+1

http://stackoverflow.com/a/19069310/4248472 – Zimmi

+0

@YahooI DBテーブルを正しいタイムゾーンで更新する必要があります。選択しないでください。最後に、Ollie Jonesのユーザー –

答えて

3

このサーバーは、おそらくUTCで動作しています。スリランカは、偶然ではなく、UTCより5:30早い。あなたのサーバは確かにあなたのテーブルに正しい時間を記録しています。それはちょうど間違ったゾーンにあります。

共有サーバーを操作するこれらのユーザーは、あなただけのために変更するつもりはありません。世界中のユーザーとサーバーを共有します。 (どこでもUTC時刻にサーバを動作させるために良い習慣を考えられていますことに注意してくださいので、あなたのサーバが廊下だった場合は、同じ問題を持っているでしょう。)

DATETIMEからTIMESTAMPにごLoginAt列のデータ型を変更します。 TIMESTAMPの値は常にUTCで記録され、表示されると常に現地時間に変換されます。その後

、あなたが何かを行う前に、すでに発見した

SET time_zone = 'Asia/Colombo' 

コマンドを発行(プログラムから、またはphpMyAdminにして)のMySQLに接続するたびに。その後、TIMESTAMPのデータが現地時間で表示されます。

また、ご存知のDATETIMEまたはDATE時間データがUTCとの関連で記録されている場合は、convert it in MySQL using CONVERT_TZ()とすることができます。たとえば、

SELECT CONVERT_TZ(LoginAt, 'UTC', 'Asia/Colombo') LoginAt, ... 

などの情報は、現地時間でお知らせします。

知る事が​​TIMESTAMPデータ型、等々NOW()CURDATE()CURRENT_TIMESTAMPとは、タイムゾーンの設定を使用して取得していることです。 DATETIMEDATEはありません。したがって、あなたのプログラムはCURRENT_TIMESTAMPを暗黙的にUTCの現地時間に変換して、DATETIMEの列に格納し、時刻をUTCに凝縮します。

プログラムがTIMESTAMP列にそれを格納していた場合、格納された時間の時間帯は凝結されません。また、プログラムが質問内でクエリを発行する前にset time_zone = 'Asia/Colombo'コマンドを発行した場合、時間をローカル時間に凝固させてからDATETIME列に格納します。

混乱しますか?はい。

+0

のソリューションを見つけました。包括的な答えをありがとう。私は十分な時間をかけて、これらすべてのステップを一歩一歩試してみます。それから私はあなたの答えを受け入れることにします。 –

+0

最後に、私は解決策を見つけました。私の質問に私の更新答えを見てください。 –

関連する問題