web-dev-qa-db-fra.com

Vérifiez si la date est inférieure à la date d'aujourd'hui

Je dois déterminer si la date personnalisée fournie par l'utilisateur de l'application est inférieure à la date du jour ou non.

J'essaie de suivre le code:

$today    = JFactory::getDate();                        // 2015-06-14 16:54:50
$expected = JFactory::getDate($data['expected_date']);  // 2015-06-14 00:00:00

if ($expected < $today)
{
    throw new UnexpectedValueException(JText::_('COM_MYCOMPONENT_REQUEST_EXPECTED_DATE_ERROR'));
}

Comme vous pouvez le voir ci-dessus, $today renvoie la date correcte, mais elle le fait avec le temps, ce qui entraîne l'échec de ma boucle if.

Je préfère généralement Joomla pour implémenter n'importe quel code. C'est bien!

3
Sahil Purav

Je compare toujours les dates avec les timestamps Unix. En ce jour, il n'est pas question de minutes ni de fuseaux horaires.

if ($expected->toUnix() < $today->toUnix())

D'autre part, si vous souhaitez comparer uniquement la partie de date, vous pouvez simplement formater les dates et les comparer avec la comparaison de chaîne simple:

if ($expected->format('Y-m-d') < $today->format('Y-m-d'))

De plus, lorsque vous recevez une date, celle-ci peut être sur le fuseau horaire de l'utilisateur, vous devrez donc peut-être la convertir:

$userTz = JFactory::getUser()->getParam('timezone');
$timeZone = JFactory::getConfig()->get('offset');

if ($userTz)
{
    $timeZone = $userTz;
}

$tz = new DateTimeZone($timeZone);
$date = JFactory::getDate($expected, $tz);
3
Anibal