4

データベース テーブルにユーザー エントリ ログを挿入したいと考えています。現在の日時を保持したい列は「date_time decimal(10,0) NOT NULL DEFAULT '0'」です。データを挿入するとき、フィールドを次のように設定しました

$this->mytable->date_time = time();

私のクエリは正常に実行されました。しかし、エントリの時刻を表示したい場合、PC(ローカルサーバー)の時刻と一致しない時刻が表示されます。書いた時間を表示するには

echo date('Y-m-d h:i:s A', $log->date_time);

何度かテストしましたが、正確な時間より 4 時間少ない時間を示しています。私のテストでは、現在の時刻は 2013-09-15 04:46:34 PM ですが、表の行は 2013-09-15 12:46:34 PM を示しています。

私を助けてください。私は間違いを見つけることができません。

4

3 に答える 3

5

タイムゾーンを指定する必要があります。このtime()関数は、タイムゾーンに依存しないタイムスタンプを返すだけです。

date()サーバーのタイムゾーンを使用している関数を使用する場合は、次のDateTimeオブジェクトを使用することをお勧めします。

$timezone = new DateTimeZone("Etc/GMT-4");
$date = new DateTime("@".$log->date_time); // @-symbol indicates timestamp input
$date->setTimezone($timezone);
echo $date->format("r");

サポートされているタイムゾーンのリストは次のとおりですhttp://php.net/manual/en/timezones.php

于 2013-09-15T11:13:07.810 に答える
3

ごめん。それは私の間違いでした。データを挿入するとき、タイムゾーンを次のように設定しました

if(function_exists('date_default_timezone_set')) date_default_timezone_set("Asia/Dhaka");

しかし、データを表示するときにタイムゾーンを設定するのを忘れていました。表示ページで以前に定義したようにタイムゾーンを設定すると、正常に機能します。助けてくれてありがとう。

于 2013-09-15T11:21:01.593 に答える
2

これを試して

<?php
date_default_timezone_get();
echo time();

マニュアル

于 2013-09-15T11:15:10.130 に答える