6

index.phpに日付/時刻を出力した場合echo date('m/d/Y h:i:s a', time());。あたりです。その後のどこかで日付/時刻を出力すると、たとえば拡張機能では、正確に4時間オフになります。php.iniとMagento自体でタイムゾーンを適切に設定したので、何が原因でタイムゾーンがオフになっているのかわかりません。バージョン1.7.0.2を実行しています。

編集

さて、私はいくつかのことを学びました。

Magentoは、app/mage.phpで常にタイムゾーンをUTCに設定します

line 767: date_default_timezone_set('UTC')

したがって、基本的にdate()、time()などを使用することはできません。[管理]->[システム]->[構成]/[一般]->[ロケール]オプションでターゲットのタイムゾーンを設定し、次のようなものを使用する必要があります。

$now = Mage::getModel('core/date')->timestamp(time());
echo date('m/d/y h:i:s', $now);

767行目を自分のタイムゾーンにいつでも置き換えることができますが、コアコードを変更するのは好きではありません。そこに他のオプションはありますか?

4

3 に答える 3

7

Magentoで推奨される方法は、この例のようにスカラー値ではなく、ZendまたはVarianの日時オブジェクトを使用することです。オブジェクトを取得したら、setTimezone呼び出しを使用して、サーバー以外の他のタイムゾーンに簡単に変換できます。

// a more complete example
$datetime = Zend_Date::now();
// admin controls this output through configuration
$datetime->setLocale(Mage::getStoreConfig(
             Mage_Core_Model_Locale::XML_PATH_DEFAULT_LOCALE))
         ->setTimezone(Mage::getStoreConfig(
             Mage_Core_Model_Locale::XML_PATH_DEFAULT_TIMEZONE));
echo $datetime->get(Zend_Date::DATETIME_SHORT);
于 2012-09-30T10:26:22.297 に答える
4

Magentoのデータベースに日付を保存する場合は、UTCであることを確認してください。デフォルトでは、Magentoはすべての日付をUTCとして保存しますが、ローカルタイムゾーンで表示することになっています。

于 2013-09-26T04:07:25.070 に答える
0

私の場合、時間はsystem.logなどで異なりますが、Scheduler(cronjobs)でも異なります。

つまり、リアルタイムで01.15になり、スケジューラで作成された時刻が常に正しいとしましょう。この場合は01.15です。実行時間よりも01.16である場合もありますが、多くの場合02.16であるため、01.16と02.16が混在しているため、時間は連続的に変化します。

システムログを確認すると、同じことがわかります。最初に、01.50、02.45、03.50、突然02.55などのメッセージの時間が増加していることがわかります。

したがって、今回はシステムに変化をもたらす何かがありますが、おそらく私のプロバイダーが何かを見つけます...しかし、それはシステム時間ではなく、Magentoと関係があります..Magentoはログに書き込みます..

編集:

なぜこの問題が発生するのかはわかりませんが、ヨーロッパ/アムステルダムのゾーンでMage.phpのUTC時刻を変更しました。これで、ログでもすべての時間が正しくなりました。

しかし、もう一度問題があります。スケジューラ(拡張)ですぐにcronジョブをスケジュールすると、このジョブは1時間後にスケジュールされます(スケジューラの他の時間は正しいです)。拡張機能Copernicaは(スケジューラを介さずに)たとえば18.00で実行され、前回は17.00に実行されると書き込みます...他のMagento以外のWebショップでこの種の問題が発生することはありません..データベースもphp.iniでEurope/Amsterdamを使用しています..

于 2013-11-15T02:52:27.593 に答える