MaviBot berfungsi dengan format TARIKH dan MASA berikut:
untuk tarikh – "dd.mm.yyyy"
untuk masa – "HH:MM"
Pembolehubah
Untuk bekerja dengan tarikh dan masa, anda boleh menggunakan pembolehubah berikut:
current_date - tarikh semasa dalam format dd.mm.yyyy, berdasarkan zon waktu projek
next_day - tarikh esok dalam format dd.mm.yyyy; berguna untuk menjadualkan mesej
current_time - masa semasa dalam format hh:mm, berdasarkan zon waktu projek
weekday - hari dalam minggu sebagai nombor: Isnin = 1, Selasa = 2, dsb.
Akses pantas kepada penerangan fungsi:
- Tambah masa ke masa
- Bandingkan masa
- Tetapkan selang masa
- Kira masa sehingga hari D
- Cari hari lahir seterusnya
- Dapatkan tarikh hari minggu tertentu
- Dapatkan tarikh hari tertentu dalam bulan
- Semak jika dalam waktu bekerja
Cara menambah masa ke masa
Anda boleh membandingkan tarikh dan masa menggunakan pengendali logik seperti nombor.
addYear() | addMonth() | addDays() | addMinutes()
addYear(date, years_to_add) - mengira tarikh baru dengan menambah bilangan tahun tertentu pada tarikh yang diberikan, dengan mengambil kira tahun lompat. Gunakan nombor negatif untuk menolak tahun.
addMonth(date, months_to_add) - mengira tarikh baru dengan menambah bilangan bulan tertentu pada tarikh yang diberikan, dengan mengambil kira tahun lompat. Gunakan nombor negatif untuk menolak bulan.
addDays(date, days_to_add) - menambah bilangan hari tertentu pada tarikh. Gunakan nombor negatif untuk menolak hari. Contoh: addDays(current_date, 20) atau addDays('20.08.2019', -99)
addMinutes(time, minutes_to_add) - menambah bilangan minit tertentu pada masa. Gunakan nombor negatif untuk menolak minit. Contoh: addMinutes(current_time, 20) atau addMinutes('20:08', -30)
'date' + days - menambah bilangan hari tertentu pada tarikh
'time' + minutes - menambah bilangan minit tertentu pada masa
Contoh menambah bilangan tahun tertentu pada tarikh:


Contoh menambah bilangan bulan tertentu pada tarikh:


Contoh menggunakan operasi matematik mudah — menambah hari pada tarikh dan minit pada masa:


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)
Cara membandingkan masa
Anda boleh membandingkan tarikh dan masa menggunakan pengendali logik seperti nombor:
lebih besar daripada > , kurang daripada <
sama dengan == , tidak sama dengan !=
lebih besar daripada atau sama dengan >= , kurang daripada atau sama dengan <=
Keadaan perbandingan juga boleh digabungkan menggunakan pengendali logik AND dan OR.
Keadaan perbandingan mestilah konsisten secara logik, bermakna anda tidak boleh mencipta keadaan seperti a == 1 dan a != 1, kerana nilai tidak boleh sama dan tidak sama dengan 1 pada masa yang sama.
Keadaan perbandingan dimasukkan dalam medan "Pembolehubah".

Pastikan menggunakan kelewatan apabila menentukan keadaan perbandingan dalam anak panah.

'01.09.2020'`` < '11.10.2020'
'11.10.2020' >= ``current_date
current_date == date
current_time >= '18:00'
current_time <= '21:00'
Cara menetapkan selang masa
Fungsi yang sangat berguna untuk bekerja dengan selang masa ialah:
time_interval('start_time', 'end_time')
Fungsi ini mengembalikan logik True atau False.
Gunakan fungsi ini dalam blok sebagai keadaan dalam medan "Pembolehubah untuk dibandingkan" atau dalam kalkulator menggunakan IF().
Fungsi ini membolehkan anda menyemak sama ada masa semasa berada dalam selang yang ditentukan.
time_interval('10:00','19:00') - menyemak selang masa dari 10 pagi hingga 7 malam
time_interval('19:00','07:00') - menyemak selang masa dari 7 malam hingga 7 pagi
time_interval('18.10.2021 10:00','25.10.2021 23:59:59') - menyemak selang masa antara tarikh yang berbeza
time_interval('#{current_date} 10:00','#{date} 19:00') - menyemak selang masa yang ditetapkan menggunakan pembolehubah
Mari kita lihat dengan lebih dekat contoh pertama. Fungsi ini dibaca seperti berikut:
Jika pengguna menghantar mesej yang mengandungi perkataan "masa" dalam tempoh dari 10:00 hingga 19:00, keadaan mengembalikan benar; jika tidak, ia mengembalikan palsu.
Ini membolehkan anda mencipta respons yang berbeza bergantung pada masa permintaan pelanggan.
Sebagai contoh, jika masa semasa adalah antara 10:00 dan 19:00, pelanggan akan menerima:
"Seorang pengurus akan membalas anda tidak lama lagi."
Pada masa lain, mereka akan menerima:
"Pengurus sedang tidak tersedia buat masa ini; anda akan menerima balasan semasa waktu bekerja dari jam 10:00."
Dalam medan Kalkulator, masukkan:
response = if(time_interval('10:00','19:00'), "Seorang pengurus akan membalas anda tidak lama lagi", "Pengurus sedang tidak tersedia buat masa ini; anda akan menerima balasan semasa waktu bekerja dari jam 10:00")
Dalam medan "Mesej", masukkan: #{response}


response = if(time_interval('10:00','19:00'), "Seorang pengurus akan membalas anda tidak lama lagi", "Pengurus sedang tidak tersedia buat masa ini; anda akan menerima balasan semasa waktu bekerja dari jam 10:00")
Cara mengetahui berapa banyak masa yang tinggal sehingga hari D

Untuk mengira berapa banyak masa yang tinggal sehingga hari D:
Tentukan tarikh dan masa sasaran yang anda mahu kira detik.
date_D = 10.10.2021 time_D = 12:00
Tukarkannya kepada format timestamp:
timestampD = convert_datetime("#{date_D} #{time_D}", "%d.%m.%Y %H:%M", "%s")
Tangkap masa semasa dalam format timestamp:
timestamp0 = #{timestamp}
Bundarkan nilai yang diperoleh kepada nombor bulat:
timeD = int(#{timestampD}) time0 = int(#{timestamp0})
Kira perbezaan dalam saat:
time = timeD - time0
Bahagikan dengan bilangan saat dalam sehari, dan bundarkan hasilnya:
full_days = time/86400
days = int(#{full_days})
Kira berapa banyak saat yang tinggal dari hari separa:
c = days*86400
d = time - c
Kira berapa jam ini sepadan dan bundarkan nilainya:
e = d/3600 hours = int(e)
Kira berapa banyak saat yang tinggal dari jam separa:
g = hours*3600
h = d - g
Tukarkan ini kepada minit dan bundarkan nilainya:
i = h/60
minutes = int(i)
Kira berapa banyak saat yang tinggal:
k = minutes*60
seconds = h - k
Dan paparkan masa dalam medan "Teks mesej":
Masa yang tinggal sehingga mula: #{days} hari #{hours} jam #{minutes} minit dan #{seconds} saat
Berikut ialah kod untuk dimasukkan ke dalam medan "Kalkulator":
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

Kalkulator juga menyokong penolakan tarikh dan masa tanpa penukaran jenis. Contohnya:
'11.12.2021' - '8.12.2021' mengembalikan 3 (hari)
'11:12' - '3:45' mengembalikan 447 (minit)
Cara mengetahui hari lahir seterusnya
Untuk membolehkan bot menghantar ucapan hari lahir, anda boleh menggunakan fungsi:
birthdate(date) - mengembalikan hari lahir seterusnya berdasarkan tarikh lahir seseorang: reminder = birthdate('28.04.1994')
Cara mendapatkan tarikh hari minggu tertentu
Jika anda mempunyai penghantaran berulang pada hari minggu tertentu, anda boleh mendapatkan tarikh hari minggu untuk menjadualkan penghantaran.
weekday_date(weekday, b) - mengembalikan tarikh hari minggu tertentu yang terdekat. Ia mengambil dua parameter:
Parameter pertama ialah nombor hari minggu untuk dicari (dari 1 hingga 7, di mana 1 = Isnin, 7 = Ahad).
Parameter kedua menunjukkan sama ada untuk mengembalikan tarikh hari ini jika hari minggu yang ditentukan adalah hari ini. Parameter ini adalah pilihan dan lalai kepada False.
Mari lihat contoh untuk memahami cara parameter kedua berfungsi:
Anda ingin menjadualkan mesej untuk dihantar pada hari Khamis.
Tetapi bagaimana jika pelanggan baru mendaftar pada hari Khamis?
Patutkah mesej dihantar pada hari Khamis ini atau Khamis seterusnya?
Parameter kedua ditetapkan kepada False bermakna mesej akan dihantar hanya pada Khamis seterusnya (melangkau hari ini).
Parameter kedua ditetapkan kepada True bermakna mesej akan dihantar pada hari Khamis ini, jika hari ini adalah Khamis (termasuk hari pendaftaran).
Dalam contoh kami, pengguna mendaftar pada hari Khamis, 13.02.2025, dan kami ingin menghantar mesej pada Khamis seterusnya.
Jadi, nilai yang dikembalikan ialah "20.02.2025".
Sebagai contoh, weekday_date(4) akan mengembalikan '20.02.2025'.
Jika anda mahu hari semasa dikira hanya sehingga masa tertentu, anda boleh menggunakan binaan ini:
weekday_date(4, current_time < '13:00'), di mana keadaan boleh digantikan dengan mana-mana keadaan yang anda perlukan.
Berikut ialah contoh cara menggunakan fungsi:
Contoh penggunaan fungsi dalam medan "Tarikh hantar" sambungan

Cara mendapatkan tarikh hari tertentu dalam bulan
Jika anda mempunyai tindakan berulang pada hari tertentu dalam bulan, anda boleh mendapatkan tarikh untuk kejadian terdekat hari itu untuk menjadualkan penghantaran anda.
month_date(date, b) - mengembalikan tarikh terdekat bulan untuk nombor hari yang ditentukan. Ia mengambil dua parameter:
date - nombor hari dalam bulan untuk dicari (dari 1 hingga 31)
b - parameter pilihan; menunjukkan sama ada untuk mengembalikan tarikh hari ini jika ia sepadan dengan hari yang ditentukan. Lalai kepada False.
Jika anda lulus 31 tetapi bulan semasa hanya mempunyai 30 hari, fungsi akan mengembalikan hari terakhir bulan itu (cth., 30hb).
Sebagai contoh:
Jika hari ini 05.04.2022 dan anda memanggil t = month_date(1), hasilnya ialah 01.05.2022 - 1hb bulan terdekat selepas hari ini.
Cara memeriksa sama ada masa semasa dalam waktu bekerja
Sebagai contoh, syarikat bekerja dari 9:00 pagi hingga 6:00 petang dan ditutup pada hari Sabtu dan Ahad. Mari bina pemeriksaan langkah demi langkah:
- Periksa sama ada masa dalam waktu bekerja: current_time >= '9:00' DAN current_time <= '18:00'
- Periksa sama ada masa di luar waktu bekerja: current_time < '9:00' ATAU current_time > '18:00'
- Periksa sama ada hari ini adalah hari bekerja (bukan Sabtu atau Ahad): weekday != 6 DAN weekday != 7
- Gabungkan syarat untuk menulis semasa waktu bekerja: current_time >= '9:00' DAN current_time <= '18:00' DAN weekday != 6 DAN weekday != 7
- Gabungkan syarat untuk menulis di luar waktu bekerja: current_time < '9:00' ATAU current_time > '18:00' ATAU weekday == 6 ATAU weekday == 7

Cara menukar tarikh dan masa
Format tarikh-masa yang digunakan berbeza-beza merentas sistem, dan ada kemungkinan salah satu sumber bersepadu akan mengembalikan masa dalam format yang tidak dikenali oleh MaviBot. Anda perlu menukarnya.
convert_datetime(date, fin, f_out) - menukar tarikh dan masa
Terdapat tiga parameter:
- Rentetan tarikh input
- Rentetan format input
- Rentetan format output
Contoh:
convert_datetime("2011-11-03", "%Y-%m-%d", "%Y/%m/%d") outputnya ialah 2011/11/03
Fungsi ini menukar tarikh masuk kepada timestamp.
#{current_date} #{current_time} - menukar kepada "06.01.2025 11:45" — memandangkan tiada maklumat tentang saat atau mikrosaat, timestamp yang terhasil mempunyai sifar selepas titik perpuluhan.
Sebagai contoh: 1736144700.000000
Jika anda memasukkan milisaat selepas titik perpuluhan,
convert_datetime("06.01.2025 19:26:35.123456", "%d.%m.%Y %H:%M:%S.%f", "%s.%f")
hasilnya ialah: 1736166395.123456
get_datetime(format) - fungsi untuk mendapatkan masa semasa dalam format tertentu.
Fungsi ini mengambil satu parameter — rentetan yang menentukan format output yang dikehendaki.
Penting! Respons fungsi akan menjadi (Isnin, Selasa, dsb.).
Contoh: get_datetime("%A") outputnya ialah Rabu
Penerangan parameter rentetan format, yang ditentukan dalam fungsi sebagai rentetan yang disertakan dalam tanda petikan:
Semua simbol lain mewakili diri mereka sendiri.
Anda boleh mendapatkan timestamp semasa menggunakan: convert_datetime("#{current_date} #{current_time}", "%d.%m.%Y %H:%M", "%s")
Paparkan tarikh semasa dalam format "dd nama bulan"
Untuk memaparkan tarikh dalam format "dd nama bulan", gunakan fungsi current_date_eng().
Jika anda perlu menambah bilangan hari tertentu pada tarikh ini, anda harus menentukan bilangan hari yang diperlukan sebagai parameter dalam fungsi.
Sebagai contoh, jika tarikh hari ini ialah 3 April, maka fungsi akan mengembalikan:
current_date_eng() - 3 April
current_date_eng(2) - 5 April
current_date_eng(-2) - 1 April


