Laravel - Carbon ile Zaman Çalışmaları

Makale İçerik Listesi

Örnekler

  1. X Bir tarih ile zaman nesnesi oluşturmak 
    Carbon::create(2023,9,27,0,0,'Europe/Istanbul');
  2. Şu anı timestring olarak almak istersen 
    now()->toTimeString()
  3. Zamanı formatlamak 
    {{ $post->published_at->toFormattedDateString() }}
  4. Zamanı formatlamak 2 
    {{ $comment->created_at->format('M j, Y \a\t g:i a') }}
  5. Zamanı formatlamak 3 
    \Carbon\Carbon::parse($company->type_end_date)->translatedFormat('j F Y, H:i')
  6. X bir tarihin (start_date) Y hafta sonrası(key)
    Carbon::parse($classroom->start_date)->addWeeks($key);
  7. Bir günün haftanın kaçıncı günü olduğunu hesaplamak için (Pazar = 0... Cumartesi = 6) 
    Carbon::today()->dayOfWeek
  8. Bugüne göre... ay sonu + 1 yıl
    \Carbon\Carbon::now()->endOfMonth()->addYear(1)->translatedFormat('j F Y')
  9. Bu hafta yılın kaçıncı haftası? 
    Carbon::now()->weekOfYear
  10. Haftanın kaçıncı günü olduğunu Pazartesi = 1... Pazar = 7 olacak şekilde yapmak istersen 
    $trWeekDays = [
        0 => 7, // pazar
        1 => 1, // pazartesi
        2 => 2,
        3 => 3,
        4 => 4,
        5 => 5,
        6 => 6,
    ];
    
    return $trWeekDays[Carbon::today()->dayOfWeek];
  11. X tarihinin hafta başlangıcını ve hafta bitimini (hafta başlangıcını ve bitimini de istediğin gibi ayarlayarak) bulmak istersen 
    $now = Carbon::now();
    
    $hafta_baslangici = $now->startOfWeek(Carbon::TUESDAY);
    $hafta_sonu = $now->endOfWeek(Carbon::MONDAY);
    
    $weekStartDate = $hafta_baslangici->format('Y-m-d H:i'); // string(16) "2021-10-02 00:00"
    $weekEndDate = $hafta_baslangici->format('Y-m-d H:i'); // string(16) "2021-10-08 23:59"
  12. Türkçe düzgün şekilde tarihi yazdırmak istersen öncelikle config dosyasında Türkçe ve saat dilimi için ayar yapmamız lazım. 
    'timezone' => 'Europe/Istanbul',
    'locale' => 'tr_TR',
    'fallback_locale' => 'tr',
    Şimdi de Türkçe için formatlayalım. 
    return \Carbon\Carbon::parse($this->created_at)->translatedFormat('j F Y, l H:i');
  13. Kişinin anlayacağı şekilde tarihin ne kadar önce olduğunu görtermesini istersek 
    \Carbon\Carbon::parse($field->updated_at)->diffForHumans()
  14. Aslında Timestamp'ler type olarak zaten Datetime'e cast edildiğinden zaten Carbon instancedır. O nedenle \Carbon dememize de gerek yok.

Tarihten Tarih Çıkarmak/Eklemek

  1. Bir tarihten bir saat çıkarmak için subHour() metodu kullanabilirsin 
    now()->subHour()

Tarih Olmayan Bir Değeri Datetime'a Cast Etmek

Datetime olmayan bir sütun değerini Datetime'a dönüştürmek için ->withCasts(['sütun_adı' => 'tipi']) metodunu kullanabiliriz. 

$user = User::query()
    ->addSelect(['last_login_at' => Login::select('created_at')
           ->where('user_id', 'users.id')
           ->latest()
           ->take(1)
   ])
   ->withCasts(['last_login_at' => 'datetime'])
   ->orderBy('name')
   ->paginate();

Tarih üzerinden. SQL sorgusu yaparken

  1. Belli bir tarih aralığı için SQL sorgusu yaparken created_at gibi tarih sütunlarına where('created_at', '<', Carbon::now()) demek yerine whereDate(), whereDay(), whereMonth(), whereYear() metodlarını kullanabiliriz. Detaylı açıklama - link
  2. Ör. Bugün olanları sorgulamak istiyoruz 
    $q->whereDate('created_at', '=', date('Y-m-d'));
    // veya
    $q->whereDate('created_at', '=', Carbon::today()->toDateString());
  3. Veya bugüne göre bugünün, bu ayın, bu yılın içeriklerini sorgulatmak istersek 
    $q->whereDay('created_at', '=', date('d'));
    $q->whereMonth('created_at', '=', date('m'));
    $q->whereYear('created_at', '=', date('Y'));

Form'da Date ile Çalışmak

  1. <input class="form-control" type="datetime" name="timestamp" value="{{ $chapter->created_at }}">
  2. <div class="form-group">
       <label for="start_date">Abonelik Başlangıç:</label>
       <input type="date"
          class="form-control"
    	  id="start_date"
          name="start_date"
          value="{{ \Carbon\Carbon::parse($subscription->start_date)->translatedFormat('Y-m-d') }}">
    </div>

Referanslar

  1. Carbon API - week
  2. Eloquent date filtering: whereDate() and other methods - link
  3. Video: WhereX Magic Methods for Fields and Dates - link
  4. Laravel Courses in a Simple Language - link