diff --git a/ecrire/tests/Filtre/Date/AffdateTest.php b/ecrire/tests/Filtre/Date/AffdateTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..1060d70a1f1e009ea1041fee6344feee8af9cdc4
--- /dev/null
+++ b/ecrire/tests/Filtre/Date/AffdateTest.php
@@ -0,0 +1,87 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * Test unitaire de la fonction affdate_court du fichier inc/filtres.php
+ */
+
+namespace Spip\Test\Filtre\Date;
+
+use PHPUnit\Framework\Attributes\DataProvider;
+use PHPUnit\Framework\TestCase;
+
+class AffdateTest extends TestCase
+{
+	public static function setUpBeforeClass(): void {
+		find_in_path('inc/filtres.php', '', true);
+	}
+
+	#[DataProvider('providerAffdateWithoutDay')]
+	public function testAffdateWithoutDay($expected, $date, $lang): void {
+		$GLOBALS['spip_lang'] = $lang;
+		$actual = affdate($date);
+		$this->assertEquals($expected, $actual);
+	}
+
+	public static function providerAffdateWithoutDay(): array {
+		return [
+			'ca-nc-01-2010' => [
+				'expected' => 'gener de 2010',
+				'date' => '2010-01-00 01:00:00',
+				'lang' => 'ca',
+			],
+			'de-nc-01-2010' => [
+				'expected' => 'Januar 2010',
+				'date' => '2010-01-00 01:00:00',
+				'lang' => 'de',
+			],
+			'en-nc-01-2010' => [
+				'expected' => 'January 2010',
+				'date' => '2010-01-00 01:00:00',
+				'lang' => 'en',
+			],
+			'es-nc-01-2010' => [
+				'expected' => 'enero de 2010',
+				'date' => '2010-01-00 01:00:00',
+				'lang' => 'es',
+			],
+			'fr-nc-01-2010' => [
+				'expected' => 'janvier 2010',
+				'date' => '2010-01-00 01:00:00',
+				'lang' => 'fr',
+			],
+			'it-nc-01-2010' => [
+				'expected' => 'Gennaio 2010',
+				'date' => '2010-01-00 01:00:00',
+				'lang' => 'it',
+			],
+			'nl-nc-01-2010' => [
+				'expected' => 'januari 2010',
+				'date' => '2010-01-00 01:00:00',
+				'lang' => 'nl',
+			],
+			'pl-nc-01-2010' => [
+				'expected' => 'Styczeń 2010',
+				'date' => '2010-01-00 01:00:00',
+				'lang' => 'pl',
+			],
+			'pt-nc-01-2010' => [
+				'expected' => 'Janeiro de 2010',
+				'date' => '2010-01-00 01:00:00',
+				'lang' => 'pt',
+			],
+		];
+	}
+
+	#[DataProvider('providerAWithoutDayAndMonth')]
+	public function testAffdateWithoutDayAndMonth($lang): void {
+		$GLOBALS['spip_lang'] = $lang;
+		$this->assertEquals(2010, affdate('2010-00-00 01:00:00'));
+	}
+
+	public static function providerAWithoutDayAndMonth(): array {
+		$list = array_column(self::providerAffdateWithoutDay(), null, 'lang');
+		return array_map(fn ($entry) => ['lang' => $entry['lang']], $list);
+	}
+}
diff --git a/ecrire/tests/legacy/unit/filtres/affdate.php b/ecrire/tests/legacy/unit/filtres/affdate.php
deleted file mode 100644
index bd813ed9fa4b57f930a3a56de9efe870d54bc6d9..0000000000000000000000000000000000000000
--- a/ecrire/tests/legacy/unit/filtres/affdate.php
+++ /dev/null
@@ -1,109 +0,0 @@
-<?php
-
-declare(strict_types=1);
-
-$test = 'affdate';
-
-$remonte = __DIR__ . '/';
-
-while (!is_file($remonte . 'test.inc')) {
-	$remonte .= '../';
-}
-
-require $remonte . 'test.inc';
-
-include_spip('inc/filtres');
-
-include_spip('inc/lang');
-
-$lang = $GLOBALS['spip_lang'];
-
-$GLOBALS['spip_lang'] = 'ca';
-
-$essais['nc-01-2010'] = ['gener de 2010', '2010-01-00 01:00:00'];
-
-$essais['nc-nc-2010'] = ['2010', '2010-00-00 01:00:00'];
-
-$err[$GLOBALS['spip_lang']] = tester_fun('affdate', $essais);
-
-$GLOBALS['spip_lang'] = 'de';
-
-$essais['nc-01-2010'] = ['Januar 2010', '2010-01-00 01:00:00'];
-
-$essais['nc-nc-2010'] = ['2010', '2010-00-00 01:00:00'];
-
-$err[$GLOBALS['spip_lang']] = tester_fun('affdate', $essais);
-
-$GLOBALS['spip_lang'] = 'en';
-
-$essais['nc-01-2010'] = ['January 2010', '2010-01-00 01:00:00'];
-
-$essais['nc-nc-2010'] = ['2010', '2010-00-00 01:00:00'];
-
-$err[$GLOBALS['spip_lang']] = tester_fun('affdate', $essais);
-
-$GLOBALS['spip_lang'] = 'es';
-
-$essais['nc-01-2010'] = ['enero de 2010', '2010-01-00 01:00:00'];
-
-$essais['nc-nc-2010'] = ['2010', '2010-00-00 01:00:00'];
-
-$err[$GLOBALS['spip_lang']] = tester_fun('affdate', $essais);
-
-$GLOBALS['spip_lang'] = 'fr';
-
-$essais['nc-01-2010'] = ['janvier 2010', '2010-01-00 01:00:00'];
-
-$essais['nc-nc-2010'] = ['2010', '2010-00-00 01:00:00'];
-
-$err[$GLOBALS['spip_lang']] = tester_fun('affdate', $essais);
-
-$GLOBALS['spip_lang'] = 'it';
-
-$essais['nc-01-2010'] = ['Gennaio 2010', '2010-01-00 01:00:00'];
-
-$essais['nc-nc-2010'] = ['2010', '2010-00-00 01:00:00'];
-
-$err[$GLOBALS['spip_lang']] = tester_fun('affdate', $essais);
-
-$GLOBALS['spip_lang'] = 'nl';
-
-$essais['nc-01-2010'] = ['januari 2010', '2010-01-00 01:00:00'];
-
-$essais['nc-nc-2010'] = ['2010', '2010-00-00 01:00:00'];
-
-$err[$GLOBALS['spip_lang']] = tester_fun('affdate', $essais);
-
-$GLOBALS['spip_lang'] = 'pl';
-
-$essais['nc-01-2010'] = ['Styczeń 2010', '2010-01-00 01:00:00'];
-
-$essais['nc-nc-2010'] = ['2010', '2010-00-00 01:00:00'];
-
-$err[$GLOBALS['spip_lang']] = tester_fun('affdate', $essais);
-
-$GLOBALS['spip_lang'] = 'pt';
-
-$essais['nc-01-2010'] = ['Janeiro de 2010', '2010-01-00 01:00:00'];
-
-$essais['nc-nc-2010'] = ['2010', '2010-00-00 01:00:00'];
-
-$err[$GLOBALS['spip_lang']] = tester_fun('affdate', $essais);
-
-$GLOBALS['spip_lang'] = $lang;
-
-// si le tableau $err est pas vide ca va pas
-
-$ok = true;
-
-foreach ($err as $l => $e) {
-	if (count($e) > 0) {
-		$ok = false;
-		echo $l;
-		echo '<dl>' . implode('', $e) . '</dl>';
-	}
-}
-
-if ($ok) {
-	echo 'OK';
-}