web-dev-qa-db-ja.com

Joomla! JFactory :: getDateが間違っている

ドキュメントによると JFactory/getDate$tzOffsetデフォルト値は0。ただし、次の例:

$date_default_offset = JFactory::getDate('now');
echo $date_default_offset->toRFC822(true);
echo "<br />";
$date_zero_offset = JFactory::getDate('now', 0);
echo $date_zero_offset->toRFC822(true);

...異なる出力を提供します:

Mon, 13 Oct 2014 18:31:37 +0000
Mon, 13 Oct 2014 19:31:41 +0100

両方の日付が同じであるべきではありませんか?他に何を考慮すべきですか?

実際の日付は次のとおりです。

echo date("r"); // Mon, 13 Oct 2014 20:40:33 +0200

サーバーがスペインにあるため、正解です(+1 GMTおよび+1夏時間の夏時間)。

カナリア諸島の現在の時刻を考慮してモジュールを調整しようとすると問題が発生しました。これはMon, 13 Oct 2014 19:31:41 +0100与えられた例に従って。

私はJoomlaを使用しています! 2.5.27、サーバーのタイムゾーンはカナリア(GMT + 0)に設定されています。

6
pQB

ファイル_/libraries/joomla/factory.php_を開き、getDate()関数を検索します。

_public static function getDate($time = 'now', $tzOffset = null)
_

タイムゾーンオフセットのデフォルト値(_$tzOffset_)はnullであり、_0_ではありません。 Joomlaドキュメント の誤りが原因であるか、2.5より古いバージョンが原因です。

Joomla 3では、$date_zero_offset = JFactory::getDate('now', 0);はエラーを発生させます:

DateTime :: __ construct()は、パラメーター2がDateTimeZoneであると想定し、整数を指定します

したがって、カナリア諸島では、これを使用できます。

_$date_zero_offset = JFactory::getDate('now', 'Atlantic/Canary');
_
4
Farahmand

次のように、グローバル構成からオフセットを取得することをお勧めします。

$date = JFactory::getDate($input='now', 'UTC');
$tz   = JFactory::getConfig()->getValue('config.offset');
$date->setOffset($tz);

echo $date->toFormat();

生活を少し簡単にし、コードを減らすには、JHtml::dateの使用をお勧めします

echo JHtml::date($input = 'now', 'm/d/Y', false);

お役に立てれば

3
Lodder

Joomlaで日付を正しく取得できませんでした! v.3.9.14、これが私の(証明済み)ソリューションです:

$oUser_TZ  = JFactory::getUser()->getTimezone();
$aUser_tz  = (array)$oUser_TZ; // almost sure this step is not that necessary
$full_date = JFactory::getDate('now', $aUser_tz['timezone']); // pretty sure $oUser_tz->timezone will work

// I had try to use $full_date->Format('Y-m-d H:i:s') but it was giving me the non-converted-to-wanted-timezone date, so
$date_converted = substr($full_date, 0, 19);

$date_convertedは、日付をY-m-d H:i:sの形式で、希望するタイムゾーンで示します。

0
ecedenyo