it-swarm.com.de

Joomla! JFactory :: getDate ist falsch

Laut Dokumentation JFactory/getDate$tzOffset Ist der Standardwert 0. Das folgende Beispiel ist jedoch:

$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);

... gibt verschiedene Ausgänge:

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

Sollten nicht beide Daten gleich sein? Was sollte ich sonst noch beachten?

Das aktuelle Datum ist:

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

Das ist richtig, weil sich der Server in Spanien befindet (+1 GMT und +1 Sommerzeit im Sommer).

Das Problem trat auf, als versucht wurde, ein Modul so anzupassen, dass es die aktuelle Uhrzeit auf den Kanarischen Inseln berücksichtigt. Dies sollte laut dem angegebenen Beispiel Mon, 13 Oct 2014 19:31:41 +0100 Sein.

Ich benutze Joomla! 2.5.27, die Serverzeitzone ist auf Canary (GMT + 0) eingestellt.

6
pQB

Öffne die Datei /libraries/joomla/factory.php Und suche nach getDate() function:

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

Der Standardwert für den Zeitzonenversatz ($tzOffset) Ist null und nicht 0. Möglicherweise liegt ein Fehler in der Joomla-Dokumentation vor oder es handelt sich um eine ältere Version als 2.5.

In Joomla 3 löst $date_zero_offset = JFactory::getDate('now', 0); einen Fehler aus:

DateTime :: __ construct () erwartet, dass Parameter 2 DateTimeZone ist, wobei eine Ganzzahl angegeben wird

Für die Kanarischen Inseln können Sie also Folgendes verwenden:

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

Es könnte eine Idee sein, den Offset von Ihrer globalen Konfiguration wie folgt abzurufen:

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

echo $date->toFormat();

Um das Leben ein wenig zu vereinfachen und weniger Code zu haben, würde ich vorschlagen, JHtml::date Zu verwenden.

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

Hoffe das hilft

3
Lodder