Archives par étiquette : date

Magento 2 : Date erronée sur les facture pdf

Après avoir mis à jour Magento, j’ai eu une drôle de surprise en imprimant des factures.

D’ailleurs, je ne l’ai même pas vu tout de suite, mais j’ai fini par m’en apercevoir et heureusement. Car Magento est parti dans le futur.

date erronée

Et alors il n’y a rien du tout de bon, ni le jour, ni le mois et encore moins l’année.

Une date erronée ,c’est vraiment très surprenant comme erreur.

Mais ça va, il y a juste à modifier un fichier pour corriger le problème.

Il s’agit du fichier Timezone.php qui se trouve : /vendor/magento/framework/Stdlib/DateTime/Timezone.php

N’oubliez pas de faire une sauvegarde de votre fichier.

Allez vers la ligne 196 et commentez (ou supprimer cette fonction) :

public function scopeDate($scope = null, $date = null, $includeTime = false)
    {
        $timezone = new \DateTimeZone(
            $this->_scopeConfig->getValue($this->getDefaultTimezonePath(), $this->_scopeType, $scope)
        );
        switch (true) {
            case (empty($date)):
                $date = new \DateTime('now', $timezone);
                break;
            case ($date instanceof \DateTime):
            case ($date instanceof \DateTimeImmutable):
                $date = $date->setTimezone($timezone);
                break;
            case (!is_numeric($date)):
                $timeType = $includeTime ? \IntlDateFormatter::SHORT : \IntlDateFormatter::NONE;
                $formatter = new \IntlDateFormatter(
                    $this->_localeResolver->getLocale(),
                    \IntlDateFormatter::SHORT,
                    $timeType,
                    $timezone
                );
                $timestamp = $formatter->parse($date);
                $date = $timestamp
                    ? (new \DateTime('@' . $timestamp))->setTimezone($timezone)
                    : new \DateTime($date, $timezone);
                break;
            case (is_numeric($date)):
                $date = new \DateTime('@' . $date);
                $date = $date->setTimezone($timezone);
                break;
            default:
                $date = new \DateTime($date, $timezone);
				$date = new \DateTime(is_numeric($date) ? '@' . $date : $date);
                $date->setTimezone($timezone);
                break;
        }

        if (!$includeTime) {
            $date->setTime(0, 0, 0);
        }

        return $date;
    }

Et remplacez là par cette fonction :

public function scopeDate($scope = null, $date = null, $includeTime = false)
{
    $timezone = new \DateTimeZone(
        $this->_scopeConfig->getValue($this->getDefaultTimezonePath(), $this->_scopeType, $scope)
    );
    switch (true) {
        case (empty($date)):
            $date = new \DateTime('now', $timezone);
            break;
        case ($date instanceof \DateTime):
        case ($date instanceof \DateTimeImmutable):
            $date = $date->setTimezone($timezone);
            break;
        default:
            $date = new \DateTime(is_numeric($date) ? '@' . $date : $date);
            $date->setTimezone($timezone);
            break;
    }
 
    if (!$includeTime) {
        $date->setTime(0, 0, 0);
    }
 
    return $date;
}

Et c’est tout, fini la date erronée, la bonne date est revenue.

date erronée