Laravel Türkiye Discord Kanalı Forumda kod paylaşılırken dikkat edilmesi gerekenler!Birlikte proje geliştirmek ister misiniz?

Merhaba,

Satıcılara Ayın 15'i ve ayın sonunda ödeme yapacağız.

Örneğin işleme alınan ödenecek sipariş tarihi -> 02.11.2022
Bu 15'inden önce olduğu için -> 15.11.2022 ödeme dönemine dahil oluyor.

Ama 16.11.2022 tarihinde bir ödeme hak edişi olsaydı -> ay sonuna dahil olacaktı. (30.11.2022)

Peki bu gelen tarihi carbon ile nasıl ayarlayabiliriz? Hangi döneme dahil olduğu nasıl otomatize edebilirim fikri olan var mı?

  • mkeremcansev bunu yanıtladı.
  • gundogduyakici Böyle de olur. Payment modelinde maturity_date alanını cast içine datetime olarak eklerseniz direkt if($payment->first()->maturity_date->day > 15) yapabilirsiniz.

    gundogduyakici Ayın haftalarını baz alarak yapılabilir. 2. haftası içerisinde ise ödeme yapılabilir. 2. haftayı geçmişse ödeme yapılamaz ve diğer ayın 2. haftası içerisinde ödeme yapılabilir durumuna düşer. startOfWeek() ve endOfWeek() ile yapabilirsiniz.

      mkeremcansev Anladım hocam fakat şöyle bir şey var 2 hafta 14 gün yaptığı için 14 içinde de müşteri iade edebilir. Ederse o ürünün ödemesini yapmayacağım. O yüzden tam 15 gün olması gerekiyor.

      Hak ediş tarihinin gününü alsam örneğin ayın 12'si.
      Ödeme günü (12) < 15 --> o ayın 15'i ödeme eklesem değilse;
      $paymentDay->endOfMonth()->format('d.m.Y') olarak ödeme günü ayarlasam (yani o ayın son günü)

        gundogduyakici Böyle bir şey mi?

        $midMonth = today()->startOfDay()
            ->addDays(14);
        
        // $paymentDate ay ortasından önce ise true; değilse false döner
        $paymentDate->lessThan($midMonth);

          mgsmus Aynen abi ben zaten örneğin müşteri satıcının ödemesini onayladığında payment tablosuna bazı bilgiler ekletiyorum. Onayladığı tarih +15 olarak "maturity_date" alanıne ekliyorum.

          05.11.2022 tarihinde müşteri onayladıysa 20.11.2022 olarak payment tablosunda tutuyorum.
          Ama ayın 15'ini geçtiği için bu tarih ödemeniz 30.11.2022 de yapılacak diye göstertmek istiyorum.

          $paymentDate = Carbon::parse($payment->first()->maturity_date);
          
          if($paymentDate->isoFormat('D') > 15) {
              dd('ay sonunda ekle');
          }else {
              dd('15inde ödeme yap');
          }

          böyle bir şey olabilir mi sizce?

            gundogduyakici Böyle de olur. Payment modelinde maturity_date alanını cast içine datetime olarak eklerseniz direkt if($payment->first()->maturity_date->day > 15) yapabilirsiniz.

              mgsmus peki dateTime yerine tabloda o alan date ise yine işe yarar mı?

                • mgsmus

                  Seviye 1389
                • Düzenlendi

                gundogduyakici Tabi ki. date yaparsanız saat 00:00:00 olur, datetime yaparsanız saati de tutarsınız. Her ihtimale karşı mantıklı olan datetime; karışıklıkları engellemek için de en doğru olanı immutable_datetime kullanmak.

                  mgsmus Anladım abi tamamdır. Son olarak bu $cast dateTime arkaplanda carbon kullanıyor değil mi?

                  $payment->first()->maturity_date->endOfMonth()->format('d.m.Y');

                  çünkü böyle kullandığım zaman işe yarıyor