Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Yazı Tipi BoyutlandırıcıAa
  • Anasayfa
  • Teknoloji
    • Siber Güvenlik
    • Yapay Zeka
    • Donanım
    • Bilim
  • Yazılım
  • Savunma & İstihbarat
  • Oyun
  • Yaşam
    • Finans
    • Sinema
    • Dünyadan Haberler
  • İş Birliği
Okuma: Laravel’de Tatil Bilgisine Göre Son Tarih Hesaplamaları Nasıl Oluşturdum
Paylaş
Yazı Tipi BoyutlandırıcıAa
Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Ara
Bizi Takip Et
  • Hakkımızda
  • Gizlilik politikası
  • Tanıtım Yazısı ve Backlink Hizmeti
© 2026 Teknomers. All Rights Reserved.

Anasayfa » Laravel’de Tatil Bilgisine Göre Son Tarih Hesaplamaları Nasıl Oluşturdum

Yazılım

Laravel’de Tatil Bilgisine Göre Son Tarih Hesaplamaları Nasıl Oluşturdum

teknomers
Son güncelleme: 31 Mayıs 2026 19:48
teknomers
Paylaş
Paylaş

Özet: Laravel’de iş teslim tarihlerini hesaplamak için hafta sonları ve tatilleri otomatik olarak atlayarak, bir veritabanı tablosu ve Carbon kullanarak nasıl çözüm geliştirilir? Kod örnekleri içerir.

Problemin Tanımı
Bir kamu kurumları için bir kupon yönetim sistemi (VMMS) geliştirirken, her departman için işlem sürelerini hesaplamam gerekiyordu. Basit gibi görünüyor, değil mi? Mevcut tarihe X gün eklemek yeterli. Yanlış.

Kamu kurumları hafta sonları çalışmaz. Tatillerde çalışmaz. Cuma günü verilen bir kuponun, pazartesi sabahına teslim tarihi olmamalıdır eğer pazartesi bir tatil ise. Bu durumları dikkate alan bir teslim tarihleri hesaplayıcısına ihtiyacım vardı.

Yaklaşım
Tatilleri kod içine sabitlemek yerine, onları bir veritabanı tablosunda sakladım. Bu sayede yeni tatiller eklemek için herhangi bir kod değişikliği yapma gereği duyulmuyor; yalnızca yeni bir veritabanı kaydı eklemek yeterli.

Schema::create(, function (Blueprint $table) {
            $table->id();
            $table->string();
            $table->date();
            $table->timestamps();
        });
        

Tarih Hesaplama Servisinin Oluşturulması
Tüm tarih hesaplamalarını yönetecek özel bir servis sınıfı oluşturdum:



        namespace App\Services;

        use Carbon\Carbon;
        use App\Models\Holiday;

        class DateHelpers
        {
            protected array $holidays;

            public function __construct()
            {
                $this->holidays = Holiday::pluck()
                    ->map(fn($d) => Carbon::parse($d)->toDateString())
                    ->toArray();
            }

            public function isNonWorkingDay(Carbon $date): bool
            {
                return $date->isWeekend()
                    || in_array($date->toDateString(), $this->holidays);
            }

            public function addBusinessDays(Carbon $date, int $days): Carbon
            {
                $result = $date->copy();
                $added = 0;

                while ($added  $days) {
                    $result->addDay();
                    if (!$this->isNonWorkingDay($result)) {
                        $added++;
                    }
                }

                return $result;
            }
        }
        

Nasıl Çalışır?
addBusinessDays metodu, gereken iş günlerini sayana kadar, her gün döngü yaparak hafta sonları ve tatilleri atlar. Örneğin, eğer bugün Cuma ise ve 3 iş günü gerekiyorsa:

Cumartesi → atla (hafta sonu)
Pazar → atla (hafta sonu)
Pazartesi → say (1)
Salı → say (2)
Çarşamba → say (3) ← teslim tarihi

Eğer Pazartesi bir tatil ise:

Cumartesi → atla (hafta sonu)
Pazar → atla (hafta sonu)
Pazartesi → atla (tatil)
Salı → say (1)
Çarşamba → say (2)
Perşembe → say (3) ← teslim tarihi

Uygulamada Kullanımı
$dateHelpers = new DateHelpers();
$deadline = $dateHelpers->addBusinessDays(Carbon::now(), 3);
Bir departman bir kupon aldığında – teslim tarihi otomatik olarak hesaplanır ve denetim kaydında saklanır:

AuditTrail::create([
            => $transaction->,
            => $department->,
            => (),
            => ->(::(), ),
        ]);
        

Performans İçin Önbellekleme
Tatiller nadiren değiştiği için, her istekte veritabanına hit yapmamak amacıyla tatil listesini önbelleğe aldım:

public function __construct()
        {
            $this->holidays = ()->(, ()->(), function () {
                return ::()
                    ->(() => ::()->())
                    ->();
            });
        }
        

Bu, tatiller listesini 24 saat boyunca önbellekler; her gün otomatik olarak yenilenir.

Geçmiş Deadline’ları Kontrol Etme
Carbon’un diffInDays fonksiyonunu kullanarak, bir teslim tarihinin geçip geçmediğini kolayca kontrol edebilirsiniz:

= ::(->)->();
        = () ::()->()->(, );

        // Negatif = geçmiş, Pozitif = kalan gün, Sıfır = bugün son gün
        if ( ) {
            // Geçmiş olarak işaretle
        }
        

False parametresi, diffInDays’in geçmiş tarihler için negatif sayılar döndürmesini sağlar; bu da geçmişin tespiti için yararlıdır.

Tatilleri Yönetme
Tatiller veritabanında saklandığı için, yöneticiler bunları basit bir CRUD arayüzü üzerinden yönetebilir:

// Bir tatil ekle
        ::([
            => ,
            => ,
        ]);

        // Yıl için tüm tatilleri al
        ::(, ()->)->();
        

Yeni bir tatil ilan edildiğinde herhangi bir kod dağıtımı gerekmiyor; yalnızca veritabanına eklemek yeterli.

Öğrendiklerim
İş mantığını veritabanından uzak tutun – tarih hesaplamaları PHP’de yer almalıdır, SQL’de değil.
Tatil sorgularını önbelleğe alınız – nadiren değişir ama sıkça sorgulanır.
Carbon’u tutarlı bir şekilde kullanın – Carbon ile ham tarih dizelerini karıştırmak, ince hatalara yol açar.
Kenar durumları test edin – Cuma günkü gönderimler, tatil Pazartesileri ve uzun hafta sonları her zaman test edilmelidir.

Sonuç
Tatil bilincine sahip teslim tarihi hesaplamaları basit görünse de, beklenenden daha fazla kenar durumu vardır. Veritabanı tabanlı tatil tablosuyla bir özel servis sınıfı, mantığı temiz, esnek ve bakımı kolay tutar. Bu desen, iş günü hesaplaması gerektiren herhangi bir sistem için çalışır; izin talepleri, SLA takibi, fatura son tarihleri ve daha fazlası için uygundur.

Kaynak: Orijinal Makale

Kendi Gelen Kutunuza Test E-posta Göndermeyi Durdurun: Bunun Yerine Bunu Kullanın
30.000 Eşzamanlı Kullanıcı için Laravel ile Gerçek Zamanlı Kıymetli Metal Fiyat Akışı Nasıl Geliştirdim
Gerçek Zamanlı Kripto Analiz Motoru Geliştirme: Go, MQTT ve Laravel ile
Laravel 12 ve React 19 ile Gizlilik Odaklı Bir Finans Uygulaması Geliştirme
Laravel 13 17 Mart’ta çıkıyor — işte her yeni özellik ve kod örnekleri
Bu Makaleyi Paylaş
Facebook Bağlantıyı Kopyala Yazdır
Paylaş
Önceki Makale Nvidia N1/N1X SoC özellikleri Computex öncesi sızdı
Sonraki Makale United uçuşu Bluetooth hoparlör ismi nedeniyle geri döndü

Sanal Medya

FacebookBeğen
452Takip Et
PinterestSabitle
237Takip Et

Son Eklenenler

Prime Günü İçin En İyi Dyson İndirimleri: Vakumlar ve Saç Aletleri
Genel
Roborock Saros 20’de 240 Dolar Tasarruf Fırsatı
Liste
Prime Günü’nde en uygun fiyatlı RTX 5080’de 250$ indirim!
Donanım
Google Home Sizi Daha İyi Tanıyacak
Liste
Microsoft’un Prime Day için En İyi Laptop Fırsatı: Kaçırmayın!
Genel
4TB Samsung 9100 Pro SSD, Prime Day’da 459$ ile fırsat!
Donanım
//

Siber güvenlik, yapay zeka ve savunma sanayiinden; finans ve sinema dünyasına uzanan geniş bir yelpaze. Teknomers; teknoloji, strateji ve yazılım dünyasını sade bir dille sizlerle buluşturuyor.

Kurumsal

  • Hakkımızda
  • Gizlilik politikası
  • Tanıtım Yazısı ve Backlink Hizmeti

Kategoriler

  • Teknoloji
  • Oyun
  • Sinema
  • Siber Güvenlik
  • Bilim
  • Finans
  • Dünyadan Güncel Haberler

Populer

  • TV'de Ücretsiz İzlenebilen Şifresiz Erotik Kanallar (2025 Güncel Frekans Listesi)

  • The Last of Us PC Kontrolleri: Hızlı Silah Değiştirme ve Tüm Tuşlar (2025)

  • Hogwarts Legacy'de Odaklanma İksiri Nasıl Yapılır?

Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Bizi Takip Et
© 2026 Teknomers. All Rights Reserved.
Welcome Back!

Sign in to your account

Kullanıcı Adı veya E-posta Adresi
Şifre

Şifrenizi mi unuttunuz?