# Tarih ve saatle çalışma

{% hint style="info" %}
MaviBot aşağıdaki TARİH ve SAAT formatlarıyla çalışır:

tarihler için – **"dd.mm.yyyy"**\
saat için – **"HH:MM"**
{% endhint %}

### Değişkenler

Tarih ve saatlerle çalışmak için aşağıdaki değişkenleri kullanabilirsiniz:

**current\_date** - proje saat dilimine göre dd.mm.yyyy formatında geçerli tarih\
**next\_day** - yarının tarihini dd.mm.yyyy formatında verir; mesaj planlamada kullanışlıdır\
**current\_time** - proje saat dilimine göre hh:mm formatında geçerli saat\
**weekday** - haftanın günü sayı olarak: Pazartesi = 1, Salı = 2, vb.

**Fonksiyon açıklamalarına hızlı erişim:**

* [Saate saat ekle](#how-to-add-time-to-time)&#x20;
* [Saati karşılaştır](#how-to-compare-time)&#x20;
* [Zaman aralıklarını ayarla](#how-to-set-time-intervals)&#x20;
* [D günü gelene kadar kalan süreyi hesapla ](#how-to-find-out-how-much-time-is-left-until-day-d)
* [Bir sonraki doğum gününü bul](#how-to-find-out-the-next-birthday)&#x20;
* [Belirli bir haftanın gününün tarihini al ](#how-to-get-the-date-of-a-specific-weekday)
* [Ayın belirli bir gününün tarihini al](#how-to-get-the-date-of-a-specific-day-of-month)&#x20;
* [Çalışma saatleri içinde olup olmadığını kontrol et](#how-to-check-if-the-current-time-is-within-working-hours)

### Saate nasıl saat eklenir&#x20;

{% hint style="info" %}
Tarih ve saatleri sayılar gibi mantıksal operatörler kullanarak karşılaştırabilirsiniz.
{% endhint %}

**addYear() | addMonth() | addDays() | addMinutes()**

<details>

<summary>Açıklama</summary>

**addYear(date, years\_to\_add) -** verilen tarihe belirtilen sayıda yıl ekleyerek yeni tarihi hesaplar, artık yılları dikkate alır. Yıl çıkarmak için negatif sayı kullanın.

**addMonth(date, months\_to\_add)** - verilen tarihe belirtilen sayıda ay ekleyerek yeni tarihi hesaplar, artık yılları dikkate alır. Ay çıkarmak için negatif sayı kullanın.

**addDays(date, days\_to\_add) -** tarihe belirtilen sayıda gün ekler. Gün çıkarmak için negatif sayı kullanın. Örnek: `addDays(current_date, 20)` veya `addDays('20.08.2019', -99)`

**addMinutes(time, minutes\_to\_add) -** saate belirtilen sayıda dakika ekler. Dakika çıkarmak için negatif sayı kullanın. Örnek: `addMinutes(current_time, 20)` veya `addMinutes('20:08', -30)`

**'date' + days** - tarihe belirtilen sayıda gün ekler

**'time' + minutes** - saate belirtilen sayıda dakika ekler

</details>

<details>

<summary>Örnekler</summary>

Bir tarihe belirli sayıda yıl eklemeye örnek:

<div data-with-frame="true"><figure><img src="/files/eb08152aff243bc73010370dc84f845adbd6550d" alt="" width="563"><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/e37b498b2ca2660902cb8758a66d8ef24fe51d9a" alt="" width="375"><figcaption></figcaption></figure></div>

Bir tarihe belirli sayıda ay eklemeye örnek:

<div data-with-frame="true"><figure><img src="/files/7a1dfc277bf5bf9db38b330ba029ef635f914a54" alt="" width="563"><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/b3f1c3800420ed38f0aba31aa34c54db09dc7f46" alt="" width="375"><figcaption></figcaption></figure></div>

Basit bir matematik işlemi kullanmaya örnek — bir tarihe gün, bir saate dakika ekleme:

<div data-with-frame="true"><figure><img src="/files/ee98341940bee2e810cf9ccec5b369515bb8d9ad" alt="" width="375"><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/cb17d1e7d95172cca3fc2b0539a15dfd8939af58" alt="" width="375"><figcaption></figcaption></figure></div>

</details>

<details>

<summary>Kopyalama için kod örneği</summary>

`count = 2`\
`date = '29.02.2020'`\
`x = addYear(date, count)`\
`y = addYear('31.12.2021', -1*count)`

`count = 10`\
`date = '30.04.2019'`\
`x = addMonth(date, count)`\
`y = addMonth('31.12.2020', -1*count)`

`count = 10`\
`date = '30.04.2019'`\
`x = addMonth(date, count)`\
`y = addMonth('31.12.2020', -1*count)`

</details>

### Saati nasıl karşılaştırılır&#x20;

<details>

<summary>Açıklama</summary>

Tarih ve saatleri sayılar gibi mantıksal operatörler kullanarak karşılaştırabilirsiniz:\
büyüktür > , küçüktür <\
eşittir == , eşit değildir !=\
büyük eşit >= , küçük eşit <=

Karşılaştırma koşulları mantıksal operatörler AND ve OR kullanılarak da birleştirilebilir.

{% hint style="warning" %}
**Karşılaştırma koşulları mantıksal olarak tutarlı olmalıdır**; yani a == 1 ve a != 1 gibi koşullar oluşturamazsınız, çünkü bir değer aynı anda 1'e hem eşit hem de eşit olmayan olamaz.
{% endhint %}

Karşılaştırma koşulları **"Değişken"** alanına yapıştırın.

<div data-with-frame="true"><figure><img src="/files/715c5f52169ff05dc4518fdc5542f3e4bc4f9cae" alt="" width="563"><figcaption></figcaption></figure></div>

ok içinde karşılaştırma koşulları belirtirken gecikmeleri kullanmayı unutmayın.

<div data-with-frame="true"><figure><img src="/files/ecf87ff1f6b144b8b590218c949e2ce99fd9d7d5" alt="" width="563"><figcaption></figcaption></figure></div>

</details>

<details>

<summary>Örnek</summary>

`'01.09.2020'`` `*`< '11.10.2020'`*&#x20;

*`'11.10.2020' >=`*` ``current_date`

`current_date == date`

`current_time >= '18:00'`&#x20;

`current_time <= '21:00'`

</details>

### &#x20;Zaman aralıkları nasıl ayarlanır

<details>

<summary>Açıklama</summary>

Zaman aralıklarıyla çalışmak için çok kullanışlı bir fonksiyon:

**time\_interval('start\_time', 'end\_time')**

Fonksiyon mantıksal değer döndürür **True** veya **False**.

Bu fonksiyonu bloklarda koşul olarak **"Karşılaştırılacak değişken"** alanında veya IF() kullanarak bir hesaplayıcı içinde kullanın.

{% hint style="info" %}
Bu fonksiyon, **geçerli saatin** belirtilen aralığa girip girmediğini kontrol etmenizi sağlar.
{% endhint %}

</details>

<details>

<summary>Örnek</summary>

`time_interval('10:00','19:00') - 10:00 ile 19:00 arasındaki zaman aralığını kontrol eder`

`time_interval('19:00','07:00') - 19:00 ile 07:00 arasındaki zaman aralığını kontrol eder`

`time_interval('18.10.2021 10:00','25.10.2021 23:59:59') - farklı tarihler arasındaki zaman aralığını kontrol eder`

`time_interval('#{current_date} 10:00','#{date} 19:00') - değişkenler kullanılarak ayarlanan zaman aralığını kontrol eder`

İlk örneğe daha yakından bakalım. Fonksiyon şu şekilde okunur:

Kullanıcı 10:00 ile 19:00 arasındaki dönemde "time" kelimesini içeren bir mesaj gönderirse, koşul true döndürür; aksi halde false döndürür.

Bu, müşterinin isteğinin saatine göre farklı yanıtlar oluşturmanıza olanak tanır.\
Örneğin, geçerli saat 10:00 ile 19:00 arasındaysa müşteri şunu alır:&#x20;***"Bir yönetici kısa süre içinde size cevap verecek."***

Diğer herhangi bir zamanda ise şunu alır:&#x20;***"Yönetici şu anda müsait değil; 10:00 ile başlayan çalışma saatleri içinde size cevap verilecektir."***

Hesaplayıcı alanına şunu girin:

`response = if(time_interval('10:00','19:00'), "Bir yönetici kısa süre içinde size cevap verecek", "Yönetici şu anda müsait değil; 10:00 ile başlayan çalışma saatleri içinde size cevap verilecektir")`

"Mesaj" alanına şunu girin: `#{response}`

<div data-with-frame="true"><figure><img src="/files/eff2208be00dbe1f4d0cc8e61a4a2d3099f03ee9" alt="" width="563"><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/4ecd4aa7cf232d3e88995c7aaff73bcad1185425" alt="" width="563"><figcaption></figcaption></figure></div>

</details>

<details>

<summary>Kopyalama için kod örneği</summary>

`response = if(time_interval('10:00','19:00'), "Bir yönetici kısa süre içinde size cevap verecek", "Yönetici şu anda müsait değil; 10:00 ile başlayan çalışma saatleri içinde size cevap verilecektir")`

</details>

### D gününe kadar ne kadar süre kaldığını nasıl öğrenirsiniz

<details>

<summary>Örnek</summary>

<div data-with-frame="true"><figure><img src="/files/41cb556e6f53b9aeca047bdae2c6fe35c0f98fa6" alt="" width="563"><figcaption></figcaption></figure></div>

D gününe kadar ne kadar süre kaldığını hesaplamak için:

Geri sayım yapılacak hedef anın tarihini ve saatini belirleyin.

`date_D = 10.10.2021 time_D = 12:00`

Bunu **timestamp** formatına dönüştürün:

`timestampD = convert_datetime("#{date_D} #{time_D}", "%d.%m.%Y %H:%M", "%s")`

Geçerli zamanı **timestamp** formatına dönüştürün:

`timestamp0 = #{timestamp}`

Elde edilen değerleri tam sayılara yuvarlayın:&#x20;

`timeD = int(#{timestampD}) time0 = int(#{timestamp0})`

Saniye cinsinden farkı hesaplayın:

`time = timeD - time0`

Bir gündeki saniye sayısına bölün ve sonucu yuvarlayın:

`full_days = time/86400`&#x20;

`days = int(#{full_days})`

Kısmi günden kalan saniye sayısını hesaplayın:

`c = days*86400`&#x20;

`d = time - c`

Bunun kaç saate karşılık geldiğini hesaplayın ve değeri yuvarlayın:

`e = d/3600 hours = int(e)`

Kısmi saatlerden kalan saniye sayısını hesaplayın:

`g = hours*3600`&#x20;

`h = d - g`

Bunu dakikaya çevirin ve değeri yuvarlayın:&#x20;

`i = h/60`&#x20;

`minutes = int(i)`

Kalan saniye sayısını hesaplayın:

`k = minutes*60`&#x20;

`seconds = h - k`

Ve süreyi **"Mesaj metni"** alanını bulun:

Başlangıca kalan süre: #{days} gün #{hours} saat #{minutes} dakika ve #{seconds} saniye

İçine eklemek için kod burada: **"Hesaplayıcı"** alanını bulun:

```
timestampD = convert_datetime("#{date_D} #{time_D}", "%d.%m.%Y %H:%M", "%s")
timestamp0 = #{timestamp}
timeD = int(#{timestampD})
time0 = int(#{timestamp0})
time = timeD - time0
full_days = time/86400
days = int(#{days})
c = days*86400
d = time - c
e = d/3600
hours = int(e)
g = hours*3600 
h = d - g
i = h/60 
minutes = int(i)
k = minutes*60 
seconds = h - k
```

<figure><img src="/files/057e2fdb00e3ed92dc3a553d08bfeb051f2a1d41" alt="" width="563"><figcaption></figcaption></figure>

Düğmenin **Hesaplayıcıda** dönüştürme yapmadan tarih ve saatleri çıkarmayı da destekler. Örneğin:

`'11.12.2021' - '8.12.2021'  3 döndürür (gün)`

`'11:12' - '3:45'  447 döndürür (dakika)`

</details>

### Bir sonraki doğum günü nasıl bulunur &#x20;

<details>

<summary>Açıklama</summary>

Botun doğum günü tebrikleri göndermesi için şu fonksiyonu kullanabilirsiniz:

**birthdate(date)** - kişinin doğum tarihine göre yaklaşan bir sonraki doğum gününü döndürür: `reminder = birthdate('28.04.1994')`&#x20;

</details>

### Belirli bir haftanın gününün tarihi nasıl alınır

<details>

<summary>Açıklama</summary>

Belirli haftanın günlerinde yinelenen gönderimleriniz varsa, gönderimi planlamak için bir haftanın gününün tarihini alabilirsiniz.

**weekday\_date(weekday, b)** - belirtilen en yakın haftanın gününün tarihini döndürür. Şunları alır **iki parametre**:

**İlk parametre, bulunacak haftanın günü** numarasıdır (1'den 7'ye kadar, burada 1 = Pazartesi, 7 = Pazar).

**İkinci parametre** şunu belirtir: **belirtilen haftanın günü bugünse bugünün tarihini döndürmek**. Bu parametre isteğe bağlıdır ve varsayılan olarak False'tur.

İkinci parametrenin nasıl çalıştığını anlamak için bir örneğe bakalım:

Bir mesajın Perşembe günü gönderilmesini planlamak istiyorsunuz.

Peki ya müşteri tam Perşembe günü kaydolursa?

Mesaj bu Perşembe mi yoksa bir sonraki Perşembe mi gönderilmeli?

İkinci parametrenin False olarak ayarlanması, mesajın yalnızca bir sonraki Perşembe günü gönderileceği anlamına gelir (bugün atlanır).

İkinci parametrenin True olarak ayarlanması, bugün Perşembe ise mesajın bu Perşembe gönderileceği anlamına gelir (kayıt günü dahil).

Bizim örneğimizde kullanıcı 13.02.2025 Perşembe günü kaydoluyor ve mesajı bir sonraki Perşembe göndermek istiyoruz.&#x20;Bu nedenle döndürülen değer "20.02.2025" olacaktır.

Örneğin, `weekday_date(4)` '20.02.2025' döndürür.

Geçerli günün yalnızca belirli bir saate kadar sayılmasını istiyorsanız, bu yapıyı kullanabilirsiniz:

`weekday_date(4, current_time < '13:00')`; burada koşul, ihtiyaç duyduğunuz herhangi bir koşulla değiştirilebilir.

<mark style="color:yeşil;">**Fonksiyonun nasıl kullanılacağına dair bir örnek:**</mark>

Bir bağlantının "Gönderim tarihi" alanında fonksiyonun kullanımına örnek

<div data-with-frame="true"><figure><img src="/files/2de222bf2b23e6cdb6282bbb3fe3a40a1d72a280" alt="" width="563"><figcaption></figcaption></figure></div>

</details>

### Ayın belirli bir gününün tarihi nasıl alınır

<details>

<summary>Açıklama</summary>

Ayın belirli bir gününde yinelenen işlemleriniz varsa, gönderimi planlamak için o güne en yakın tarihi alabilirsiniz.

**month\_date(date, b)** - belirtilen gün numarası için ayın en yakın tarihini döndürür. Şunları alır **iki parametre**:

**date** - bulunacak ayın gün numarası (1'den 31'e kadar)

**b** - isteğe bağlı parametre; belirtilen günle eşleşiyorsa bugünün tarihini döndürüp döndürmeyeceğini belirtir. Varsayılanı False'tur.

31 gönderirseniz ama geçerli ayda yalnızca 30 gün varsa, fonksiyon ayın son gününü (ör. 30.) döndürür.

Örneğin:

Bugün 05.04.2022 ise ve t = month\_date(1) çağırırsanız, sonuç 01.05.2022 olur - bugünden sonraki en yakın ayın 1'i.

</details>

### Geçerli saatin çalışma saatleri içinde olup olmadığı nasıl kontrol edilir

<details>

<summary>Açıklama</summary>

Örneğin, şirket 09:00 ile 18:00 arasında çalışıyor ve cumartesi ile pazar günleri kapalı. Kontrolleri adım adım oluşturalım:

1. Saatin çalışma saatleri içinde olup olmadığını kontrol edin: current\_time >= '9:00' **VE** current\_time <= '18:00'&#x20;
2. Saatin çalışma saatleri dışında olup olmadığını kontrol edin: current\_time < '9:00' **VEYA** current\_time > '18:00'
3. Bugünün çalışma günü olup olmadığını kontrol edin (cumartesi veya pazar değil): weekday != 6 AND weekday != 7
4. Çalışma saatleri içinde yazma için koşulları birleştirin: current\_time >= '9:00' **VE** current\_time <= '18:00' **VE** weekday != 6 **VE** weekday != 7
5. Çalışma saatleri dışında yazma için koşulları birleştirin: current\_time < '9:00' **VEYA** current\_time > '18:00' **VEYA** weekday == 6 **VEYA** weekday == 7

</details>

<details>

<summary>Örnek</summary>

<div data-with-frame="true"><figure><img src="/files/cf7bba8756ea860728cbd039860b7817ba49a05d" alt=""><figcaption></figcaption></figure></div>

</details>

### Tarih ve saati nasıl dönüştürürsünüz

<details>

<summary>Örnek</summary>

Kullanılan tarih-saat formatı sistemler arasında değişir ve entegre kaynaklardan biri MaviBot'un tanımadığı bir formatta saat döndürebilir. Bunu dönüştürmeniz gerekir.&#x20;

**convert\_datetime(date, fin, f\_out) -** tarih ve saati dönüştürür

Üç parametre vardır:

* Girdi tarih dizgesi
* Girdi format dizgesi
* Çıktı format dizgesi

Örnek: \
`convert_datetime("2011-11-03", "%Y-%m-%d", "%Y/%m/%d") на выходе будет 2011/11/03`

Bu fonksiyon gelen tarihi bir **timestamp**.

\#{current\_date} #{current\_time} - "06.01.2025 11:45" değerine dönüştürür — saniye veya mikro saniye bilgisi olmadığından, oluşan timestamp'in ondalık kısmı sıfır olur.

Örneğin: 1736144700.000000

Ondalık noktadan sonra milisaniyeleri eklerseniz,

`convert_datetime("06.01.2025 19:26:35.123456", "%d.%m.%Y %H:%M:%S.%f", "%s.%f")`

sonuç şu olur: `1736166395.123456`

**get\_datetime(format)** - geçerli saati belirli bir formatta alma fonksiyonu.\
Fonksiyon bir parametre alır — istenen çıktı formatını belirten bir dize.

{% hint style="info" %} <mark style="color:$primary;">Önemli!</mark> Fonksiyonun yanıtı (Pazartesi, Salı vb.) olacaktır.\
\
Örnek: <mark style="color:turuncu;">get\_datetime("%A") çıktısı Wednesday olacaktır</mark>
{% endhint %}

Fonksiyon içinde tırnak işaretleriyle çevrili dizeler olarak belirtilen format dizgesi parametrelerinin açıklaması:

<table data-header-hidden><thead><tr><th width="177.33333333333331">Yönerge</th><th>Değer</th><th>Örnek</th></tr></thead><tbody><tr><td><code>%a</code></td><td>Haftanın gününün kısa adı</td><td>Paz, Pts ...</td></tr><tr><td><code>%A</code></td><td>Haftanın gününün tam adı</td><td>Pazartesi, Salı, …, Pazar </td></tr><tr><td><code>%w</code></td><td>Haftanın günü, 0 Pazar ve 6 Cumartesi olacak şekilde ondalık sayı olarak</td><td>0, 1, …, 6</td></tr><tr><td><code>%d</code></td><td>Ayın günü, başında sıfır olan ondalık sayı olarak</td><td>01, 02, …, 31</td></tr><tr><td><code>%b</code></td><td>Ayın kısa adı</td><td>Oca, Şub, …, Ara</td></tr><tr><td><code>%B</code></td><td>Ayın tam adı</td><td>Ocak, Şubat, Mart, vb.</td></tr><tr><td><code>%m</code></td><td>Ay, başında sıfır olan ondalık sayı olarak</td><td>01, 02, …, 12</td></tr><tr><td><code>%y</code></td><td>İki basamaklı yıl numarası olarak yıl</td><td>00, 01, …, 99</td></tr><tr><td><code>%Y</code></td><td>Dört basamaklı yıl numarası olarak yıl</td><td>0001, 0002, …, 2013, 2014, …, 9998, 9999</td></tr><tr><td><code>%H</code></td><td>Saat (24 saatlik saat) iki basamaklı, başında sıfır olacak şekilde</td><td>00, 01, …, 23</td></tr><tr><td><code>%I</code></td><td>Saat (12 saatlik saat) iki basamaklı, başında sıfır olacak şekilde</td><td>01, 02, …, 12</td></tr><tr><td><code>%p</code></td><td>AM veya PM belirteci</td><td>AM, PM (en_US);am, pm (de_DE)</td></tr><tr><td><code>%M</code></td><td>Dakikalar, başında sıfır olan iki basamaklı ondalık sayı olarak</td><td>00, 01, …, 59</td></tr><tr><td><code>%S</code></td><td>Saniyeler, başında sıfır olan iki basamaklı ondalık sayı olarak</td><td>00, 01, …, 59</td></tr><tr><td><code>%f</code></td><td>Mikrosaniyeler, başında sıfır olan altı basamaklı sayı olarak</td><td>000000, 000001, …, 999999</td></tr><tr><td><code>%z</code></td><td>UTC farkı şu biçimde <code>±SSDD[SS[.ffffff]]</code> (nesne naive ise boş dize).</td><td>(boş), +0000, -0400, +1030, +063415, -030712.345216</td></tr><tr><td><code>%Z</code></td><td>Saat dilimi adı (nesne naive ise boş dize).</td><td>(boş), UTC, GMT</td></tr><tr><td><code>%j</code></td><td>Yılın günü, başında sıfır olan üç basamaklı sayı olarak</td><td>001, 002, …, 366</td></tr><tr><td><code>%U</code></td><td>Yılın hafta numarası (haftanın ilk günü olarak Pazar ile) başında sıfır olan ondalık sayı olarak. Yeni yılın ilk Pazarı'ndan önceki tüm günler hafta sıfır olarak kabul edilir.</td><td>00, 01, …, 53</td></tr><tr><td><code>%W</code></td><td>Yılın hafta numarası (haftanın ilk günü olarak Pazartesi ile) ondalık sayı olarak. Yeni yılın ilk Pazartesi'sinden önceki tüm günler hafta sıfır olarak kabul edilir.</td><td>00, 01, …, 53</td></tr><tr><td><code>%%</code></td><td>Sembol <code>'%'</code></td><td>%</td></tr><tr><td><code>%s</code></td><td>timestamp</td><td>1607926200</td></tr></tbody></table>

Diğer tüm semboller kendilerini temsil eder.

{% hint style="info" %}
Geçerli zaman damgasını şu şekilde alabilirsiniz: **convert\_datetime("#{current\_date} #{current\_time}", "%d.%m.%Y %H:%M", "%s")**
{% endhint %}

</details>

### Geçerli tarihi "gg ay adı" formatında göster

<details>

<summary>Örnek</summary>

Tarihi "gg ay adı" formatında göstermek için şu fonksiyonu kullanın ***current\_date\_eng()***.&#x20;

*Bu tarihe belirli sayıda gün eklemeniz gerekiyorsa, fonksiyonda gerekli gün sayısını parametre olarak belirtmelisiniz.*

Örneğin, bugün tarih 3 Nisan ise, fonksiyon şunu döndürür:

current\_date\_eng() - 3 Nisan

current\_date\_eng(2) - 5 Nisan

current\_date\_eng(-2) - 1 Nisan

</details>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.mavibot.ai/doc/tr/chatbot/functions/hesap-makinesi/date.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
