Skip to content
Snippets Groups Projects
HomeController.php 1.71 KiB
Newer Older
Адлан Шамавов's avatar
Адлан Шамавов committed
<?php

namespace App\Controller;

use DateInterval;
use DatePeriod;
use DateTime;
Адлан Шамавов's avatar
Адлан Шамавов committed
use DateTimeImmutable;
Адлан Шамавов's avatar
Адлан Шамавов committed
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
Адлан Шамавов's avatar
Адлан Шамавов committed
use Symfony\Component\HttpFoundation\Request;
Адлан Шамавов's avatar
Адлан Шамавов committed
use Symfony\Component\Routing\Attribute\Route;

class HomeController extends AbstractController
{
    private function countFriday13(int $year): iterable {
        $stardDate = new DateTime("{$year}-01-01 Friday");
        $year += 1;
        $endDate = new DateTime("{$year}-01-01");
        $interval = new DateInterval('P7D');
        foreach(new DatePeriod($stardDate, $interval, $endDate) as $day) {
            yield new DateTimeImmutable($day->format("Y-m-d"));
Адлан Шамавов's avatar
Адлан Шамавов committed
        }
Адлан Шамавов's avatar
Адлан Шамавов committed
    }
    #[Route('/{year}', name: 'home')]
    public function home(int $year): Response
Адлан Шамавов's avatar
Адлан Шамавов committed
    {
        $fridays = array();
        foreach($this->countFriday13($year) as $date) {
            $fridays[] = $date->format("Y-m-d l");
Адлан Шамавов's avatar
Адлан Шамавов committed
        }
        return $this->render('home.html.twig', ['fridays' => $fridays]);
Адлан Шамавов's avatar
Адлан Шамавов committed
    }

Адлан Шамавов's avatar
Адлан Шамавов committed
    #[Route('/{startDate}/{endDate}', name: 'home')] // 01-01-2024
    public function home(string $startDate, string $endDate): Response
Адлан Шамавов's avatar
Адлан Шамавов committed
        if (DateValidation::validate($startDate) && DateValidation::validate($endDate)) {
            try {
                $result = $this->functions->diffDays(
                    new DateTimeImmutable($startDate),
                    new DateTimeImmutable($endDate)
                );
                return $this->json(["The difference of days:" => $result]);
            } catch (\Exception $e) {
                return new Response($e->getMessage());
            }
        }
        return new Response("Invalid date format");
Адлан Шамавов's avatar
Адлан Шамавов committed
    }
}