MaviBot aşağıdaki TARİH ve SAAT biçimleriyle çalışır:

tarihler için – "gg.aa.yyyy"

saat için – "SS:DD"

Değişkenler

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

current_date - proje saat dilimine göre gg.aa.yyyy biçiminde geçerli tarih
next_day - gg.aa.yyyy biçiminde yarının tarihi; mesajları zamanlamak için kullanışlıdır
current_time - proje saat dilimine göre ss:dd biçiminde 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 ekleme

Tarihleri ve saatleri, sayılar gibi mantıksal operatörler kullanarak karşılaştırabilirsiniz.

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

addYear(tarih, eklenecek_yil) - artık yılları dikkate alarak belirtilen tarihe belirtilen sayıda yıl ekleyerek yeni tarihi hesaplar. Yıl çıkarmak için negatif sayı kullanın.

addMonth(tarih, eklenecek_ay) - artık yılları dikkate alarak belirtilen tarihe belirtilen sayıda ay ekleyerek yeni tarihi hesaplar. Ay çıkarmak için negatif sayı kullanın.

addDays(tarih, eklenecek_gun) - 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(saat, eklenecek_dakika) - saate belirtilen sayıda dakika ekler. Dakika çıkarmak için negatif sayı kullanın. Örnek: addMinutes(current_time, 20) veya addMinutes('20:08', -30)

'tarih' + gun - tarihe belirtilen sayıda gün ekler

'saat' + dakika - saate belirtilen sayıda dakika ekler

Bir tarihe belirli sayıda yıl ekleme örneği:

Bir tarihe belirli sayıda ay ekleme örneği:

Basit bir matematik işlemi kullanma örneği — tarihe gün ve saate dakika ekleme:

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)

Saat karşılaştırma

Tarihleri 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 veya eşittir >= , küçük veya eşittir <=

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

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 hem 1'e eşit hem de 1'e eşit değil olamaz.

Karşılaştırma koşulları "Değişken" alanına girilir.

Bir okta karşılaştırma koşulları belirtirken gecikmeler kullandığınızdan emin olun.

'01.09.2020'`` < '11.10.2020'

'11.10.2020' >= ``current_date

current_date == date

current_time >= '18:00'

current_time <= '21:00'

Zaman aralıkları belirleme

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

time_interval('baslangic_saati', 'bitis_saati')

Fonksiyon mantıksal True veya False döndürür.

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

Fonksiyon, geçerli saatin belirtilen aralık içinde olup olmadığını kontrol etmenizi sağlar.

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

time_interval('19:00','07:00') - saat 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 "zaman" kelimesini içeren bir mesaj gönderirse, koşul true döndürür; aksi takdirde false döndürür.

Bu, müşterinin talebinin saatine bağlı olarak farklı yanıtlar oluşturmanıza olanak tanır.

Örneğin, geçerli saat 10:00 ile 19:00 arasındaysa, müşteri şu yanıtı alacaktır:
"Bir yönetici size kısa süre içinde yanıt verecektir."

Diğer zamanlarda ise şu yanıtı alacaklardır:
"Yönetici şu anda müsait değil; çalışma saatleri içinde (10:00'dan itibaren) bir yanıt alacaksınız."

Hesap Makinesi alanına şunu girin:

response = if(time_interval('10:00','19:00'), "Bir yönetici size kısa süre içinde yanıt verecektir", "Yönetici şu anda müsait değil; çalışma saatleri içinde (10:00'dan itibaren) bir yanıt alacaksınız")

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

response = if(time_interval('10:00','19:00'), "Bir yönetici size kısa süre içinde yanıt verecektir", "Yönetici şu anda müsait değil; çalışma saatleri içinde (10:00'dan itibaren) bir yanıt alacaksınız")

Gün D'ye kalan süreyi hesaplama

Gün D'ye ne kadar süre kaldığını hesaplamak için:

Geri sayım yapmak istediğiniz hedef anın tarihini ve saatini tanımlayın.

date_D = 10.10.2021 time_D = 12:00

Bunu timestamp biçimine dönüştürün:

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

Geçerli saati timestamp biçiminde yakalayın:

timestamp0 = #{timestamp}

Elde edilen değerleri tam sayılara yuvarlayın:

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

days = int(#{full_days})

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

c = days*86400

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

h = d - g

Bunu dakikaya dönüştürün ve değeri yuvarlayın:

i = h/60

minutes = int(i)

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

k = minutes*60

seconds = h - k

Ve saati "Mesaj metni" alanında görüntüleyin:

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

İşte "Hesap Makinesi" alanına eklenecek kod:

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

Hesap Makinesi ayrıca tür dönüşümü olmadan tarih ve saat çıkarmayı da destekler. Örneğin:

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

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

Sonraki doğum gününü bulma

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

birthdate(tarih) - kişinin doğum tarihine göre bir sonraki doğum gününü döndürür: reminder = birthdate('28.04.1994')

Belirli bir hafta gününün tarihini alma

Belirli hafta günlerinde tekrarlayan postalarınız varsa, postayı zamanlamak için bir hafta gününün tarihini alabilirsiniz.

weekday_date(hafta_gunu, b) - en yakın belirtilen hafta gününün tarihini döndürür. İki parametre alır:

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

İkinci parametre, belirtilen hafta günü bugünse bugünün tarihinin döndürülüp döndürülmeyeceğini belirtir. Bu parametre isteğe bağlıdır ve varsayılan olarak False'dur.

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

Perşembe günü bir mesaj göndermeyi zamanlamak istiyorsunuz.

Peki ya müşteri Perşembe günü kaydolduysa?

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

False olarak ayarlanan ikinci parametre, mesajın yalnızca bir sonraki Perşembe günü (bugün atlanarak) gönderileceği anlamına gelir.

True olarak ayarlanan ikinci parametre, bugün Perşembe ise mesajın bu Perşembe (kayıt günü dahil) gönderileceği anlamına gelir.

Örneğimizde, kullanıcı Perşembe, 13.02.2025 tarihinde kaydolur ve mesajı bir sonraki Perşembe günü göndermek isteriz.
Döndürülen değer "20.02.2025" olacaktır.

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

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

weekday_date(4, current_time < '13:00'), burada koşul ihtiyacınız olan herhangi bir koşulla değiştirilebilir.

Fonksiyonun nasıl kullanılacağına dair bir örnek:

Fonksiyonun bir bağlantının "Gönderme tarihi" alanında kullanımına örnek

Belirli bir ay gününün tarihini alma

Ayın belirli bir gününde tekrarlayan eylemleriniz varsa, postanızı zamanlamak için o günün en yakın tarihini alabilirsiniz.

month_date(tarih, b) - belirtilen gün numarası için ayın en yakın tarihini döndürür. İki parametre alır:

tarih - bulunacak ayın gün numarası (1'den 31'e)

b - isteğe bağlı parametre; belirtilen günle eşleşiyorsa bugünün tarihinin döndürülüp döndürülmeyeceğini belirtir. Varsayılan olarak False'dur.

31 geçerseniz ancak geçerli ay yalnızca 30 gün sürüyorsa, fonksiyon ayın son gününü döndürecektir (örneğin, 30'u).

Örneğin:

Bugün 05.04.2022 ise ve t = month_date(1) çağrısı yaparsanız, sonuç 01.05.2022 - bugünden sonraki en yakın ayın 1'i olacaktır.

Geçerli saatin çalışma saatleri içinde olup olmadığını kontrol etme

Örneğin, şirket sabah 9:00'dan akşam 6:00'ya kadar çalışıyor ve Cumartesi ve Pazar günleri kapalıdır. 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'
  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 bir iş günü olup olmadığını kontrol edin (Cumartesi veya Pazar değil): weekday != 6 VE weekday != 7
  4. Çalışma saatleri içinde yazma koşullarını birleştirin: current_time >= '9:00' VE current_time <= '18:00' VE weekday != 6 VE weekday != 7
  5. Çalışma saatleri dışında yazma koşullarını birleştirin: current_time < '9:00' VEYA current_time > '18:00' VEYA weekday == 6 VEYA weekday == 7

Tarih ve saat nasıl dönüştürülür

Kullanılan tarih-saat biçimi sistemler arasında farklılık gösterir ve entegre kaynaklardan birinin MaviBot'un tanımadığı bir biçimde saat döndürmesi mümkündür. Bunu dönüştürmeniz gerekecektir.

convert_datetime(tarih, fin, f_out) - tarih ve saati dönüştürür

Üç parametre vardır:

  • Giriş tarih dizesi
  • Giriş biçim dizesi
  • Çıkış biçim dizesi

Örnek:
convert_datetime("2011-11-03", "%Y-%m-%d", "%Y/%m/%d") çıktısı 2011/11/03 olacaktır

Bu fonksiyon, gelen tarihi bir timestamp'a dönüştürür.

#{current_date} #{current_time} - "06.01.2025 11:45" biçimine dönüştürür — saniye veya mikrosaniye hakkında bilgi olmadığından, elde edilen timestamp'ın ondalık kısmı sıfırdır.

Örneğin: 1736144700.000000

Ondalık noktadan sonra milisaniye eklerseniz,

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

sonuç şu olacaktır: 1736166395.123456

get_datetime(bicim) - geçerli saati belirli bir biçimde almak için bir fonksiyon.

Fonksiyon bir parametre alır — istenen çıkış biçimini belirten bir dize.

Önemli! Fonksiyonun yanıtı (Pazartesi, Salı vb.) olacaktır.

Örnek: get_datetime("%A") çıktısı Wednesday olacaktır

Fonksiyonda tırnak işaretleri içinde dizeler olarak belirtilen biçim dizesi parametrelerinin açıklaması:

Diğer tüm semboller kendilerini temsil eder.

Geçerli timestamp'ı şu şekilde alabilirsiniz: convert_datetime("#{current_date} #{current_time}", "%d.%m.%Y %H:%M", "%s")

Geçerli tarihi "gg ay adı" biçiminde görüntüleme

Tarihi "gg ay adı" biçiminde görüntülemek için current_date_eng() fonksiyonunu kullanın.

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

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

current_date_eng() - April 3rd

current_date_eng(2) - April 5th

current_date_eng(-2) - April 1st