it-swarm.dev

Joomla! JFactory :: getDate errato

Secondo la documentazione JFactory/getDate$tzOffset il valore predefinito è 0. Tuttavia, il seguente esempio:

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

... fornisce diversi output:

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

Entrambe le date non dovrebbero essere uguali? Cos'altro dovrei prendere in considerazione?

La data effettiva è:

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

Proprio perché il server è in Spagna (+1 GMT e +1 ora legale in estate).

Il problema è sorto durante il tentativo di adattare un modulo per tenere conto dell'ora corrente nelle Isole Canarie, che dovrebbe essere Mon, 13 Oct 2014 19:31:41 +0100 secondo l'esempio fornito.

Sto usando Joomla! 2.5.27, il fuso orario del server è impostato su Canarie (GMT + 0).

6
pQB

Apri il file /libraries/joomla/factory.php E cerca getDate() function:

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

Il valore predefinito dell'offset del fuso orario ($tzOffset) È null e non 0. Potrebbe essere dovuto a un errore in documentazione Joomla oppure è per le versioni precedenti alla 2.5.

In Joomla 3, $date_zero_offset = JFactory::getDate('now', 0); genera un errore:

DateTime :: __ construct () prevede che il parametro 2 sia DateTimeZone, dato intero

Quindi, per le Isole Canarie, puoi usare questo:

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

Potrebbe essere un'idea ottenere l'offset dal tuo Global Config in questo modo:

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

echo $date->toFormat();

Per rendere la vita un po 'più semplice e avere meno codice, suggerirei di utilizzare JHtml::date

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

Spero che sia di aiuto

3
Lodder