L'utilisation de la classe JDate est décrite dans ce document : https://docs.joomla.org/How_to_use_JDate/fr
Toutefois voici quelques précision.
$JDateCourante = Factory::getDate('now');
$JDateCourante = new JDate('now');
$JDateCourant = JDate::getInstance('now');
sont identiques
Notion de zone horaire
Quand on instancie la classe, on peu choisir d'y stocker la date en UTC :
$JDateCouranteUTC = Factory::getDate('now');
Ou selon l'heure locale du serveur :
$config = Factory::getConfig();
$offset = $config->get('offset');
$JDateCouranteLocale = Factory::getDate('now',$offset);
En cas de comparaison :
$JDateCouranteUTC == $JDateCouranteLocale
Dans la classe, la notion de timezone sera retenue.
Si l'on veut afficher la date à l'heure locale du serveur il faudra donc faire soit :
$config = Factory::getConfig();
$offset = $config->get('offset');
$JDateCourante = Factory::getDate('now',$offset);
$ddate = $JDateCourante->format('d-m-Y H:i:s',true);
Soit définir la zone puis afficher :
$config = Factory::getConfig();
$offset = $config->get('offset');
$timezone = new DateTimeZone($offset);
$JDateCourante = Factory::getDate('now');
$JDateCourante->setTimezone($timezone);
$ddate = $JDateCourante->format('d-m-Y H:i:s',true);
Calcul sur les dates
On peut bien sur effectuer des calcul sur les dates, voici un exemple :
$config = Factory::getConfig();
$offset = $config->get('offset');
$JDateCourante = newDate('now',$offset);
...
$JDateCalculee = new Jdate($JDateCourante->format('Y-m-d H:i',true),$offset); // sans les secondes
$JDateCalculee->modify('+2 days -3 hours +10 minutes');