Récupérer un objet PHP DateTime pour le dernier jour du mois

Publié le 30/01/2021 • Mis à jour le 30/01/2021


English language detected! 🇬🇧

  We noticed that your browser is using English. Do you want to read this post in this language?

Read the english version 🇬🇧 Close

Celui-ci est pour moi ! J'oublie toujours comment faire et j'écris: "dernier jour du mois" ce qui semble correct, mais non en fait ! Il faut utiliser : "dernier jour de ce mois". Peut-être qu'un jour je m'en souviendrai, en attendant j'ai ce snippet. Veuillez noter que la chaîne n'est pas sensible à la casse, on peut utiliser "THIS". J'ai aussi découvert en écrivant ce snippet qu'on pouvait simplement utiliser "dernier jour du" qui est moins explicite, mais aboutit au même résultat. 😮


<?php

declare(strict_types=1);

// src/Controller/Snippet/Snippet132Trait.php

namespace App\Controller\Snippet;

/**
 * J'utilise un trait PHP afin d'isoler chaque snippet dans un fichier.
 * Ce code doit être apellé d'un contrôleur Symfony étendant AbstractController (depuis Symfony 4.2)
 * ou Symfony\Bundle\FrameworkBundle\Controller\Controller (Symfony <= 4.1).
 * Les services sont injectés dans le constructeur du contrôleur principal.
 */
trait Snippet132Trait
{
    public function snippet132(): void
    {
        $lastDayOf = new \DateTime('last day of');
        $lastDayOfThisMonth = new \DateTime('last day of this month');

        var_dump($lastDayOf);
        var_dump($lastDayOfThisMonth); // That's it! 😁
    }
}

 Exécuter le snippet  ≪ this.showUnitTest ? this.trans.hide_unit_test : this.trans.show_unit_test ≫  Plus sur Stackoverflow   Lire la doc  Snippet aléatoire

<?php

declare(strict_types=1);

namespace App\Tests\Controller\Snippets;

use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;

/**
 * @covers Snippet132Trait
 */
final class Snippet132Test extends KernelTestCase
{
    /**
     * @covers Snippet132Trait::snippet132
     */
    public function testSnippet132isNotOk(): void
    {
        $this->expectException(\Exception::class);
        new \DateTime('last day of the month');
    }

    /**
     * @covers Snippet132Trait::snippet132
     */
    public function testSnippet132isOk(): void
    {
        $date = new \DateTime('2021-01-12');
        $date->modify('last day of this month');

        $date2 = new \DateTime('2021-01-15');
        $date2->modify('last day of');

        self::assertSame('2021-01-31', $date->format('Y-m-d'));
        self::assertSame($date2->format('Y-m-d'), $date2->format('Y-m-d'));
    }
}