MaviBot ทำงานกับรูปแบบ DATE และ TIME ต่อไปนี้:

สำหรับวันที่ – "dd.mm.yyyy"

สำหรับเวลา – "HH:MM"

ตัวแปร

ในการทำงานกับวันที่และเวลา คุณสามารถใช้ตัวแปรต่อไปนี้:

current_date - วันที่ปัจจุบันในรูปแบบ dd.mm.yyyy ตามเขตเวลาของโปรเจกต์
next_day - วันที่ของวันพรุ่งนี้ในรูปแบบ dd.mm.yyyy มีประโยชน์สำหรับการกำหนดเวลาส่งข้อความ
current_time - เวลาปัจจุบันในรูปแบบ hh:mm ตามเขตเวลาของโปรเจกต์
weekday - วันของสัปดาห์เป็นตัวเลข: วันจันทร์ = 1, วันอังคาร = 2, ฯลฯ

การเข้าถึงคำอธิบายฟังก์ชันอย่างรวดเร็ว:

วิธีเพิ่มเวลาให้กับเวลา

คุณสามารถเปรียบเทียบวันที่และเวลาโดยใช้ตัวดำเนินการเชิงตรรกะเหมือนกับตัวเลข

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

addYear(date, years_to_add) - คำนวณวันที่ใหม่โดยการเพิ่มจำนวนปีที่ระบุให้กับวันที่ที่กำหนด โดยคำนึงถึงปีอธิกสุรทิน ใช้ตัวเลขติดลบเพื่อลบปี

addMonth(date, months_to_add) - คำนวณวันที่ใหม่โดยการเพิ่มจำนวนเดือนที่ระบุให้กับวันที่ที่กำหนด โดยคำนึงถึงปีอธิกสุรทิน ใช้ตัวเลขติดลบเพื่อลบเดือน

addDays(date, days_to_add) - เพิ่มจำนวนวันที่ระบุให้กับวันที่ ใช้ตัวเลขติดลบเพื่อลบวัน ตัวอย่าง: addDays(current_date, 20) หรือ addDays('20.08.2019', -99)

addMinutes(time, minutes_to_add) - เพิ่มจำนวนนาทีที่ระบุให้กับเวลา ใช้ตัวเลขติดลบเพื่อลบนาที ตัวอย่าง: addMinutes(current_time, 20) หรือ addMinutes('20:08', -30)

'date' + days - เพิ่มจำนวนวันที่ระบุให้กับวันที่

'time' + minutes - เพิ่มจำนวนนาทีที่ระบุให้กับเวลา

ตัวอย่างการเพิ่มจำนวนปีที่กำหนดให้กับวันที่:

ตัวอย่างการเพิ่มจำนวนเดือนที่กำหนดให้กับวันที่:

ตัวอย่างการใช้การดำเนินการทางคณิตศาสตร์อย่างง่าย — การเพิ่มวันให้กับวันที่และนาทีให้กับเวลา:

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)

วิธีเปรียบเทียบเวลา

คุณสามารถเปรียบเทียบวันที่และเวลาโดยใช้ตัวดำเนินการเชิงตรรกะเหมือนกับตัวเลข:

มากกว่า > , น้อยกว่า <

เท่ากับ == , ไม่เท่ากับ !=

มากกว่าหรือเท่ากับ >= , น้อยกว่าหรือเท่ากับ <=

เงื่อนไขการเปรียบเทียบสามารถรวมกันได้โดยใช้ตัวดำเนินการเชิงตรรกะ AND และ OR

เงื่อนไขการเปรียบเทียบต้องสอดคล้องกันในเชิงตรรกะ หมายความว่าคุณไม่สามารถสร้างเงื่อนไขเช่น a == 1 และ a != 1 ได้ เนื่องจากค่าไม่สามารถเท่ากับและไม่เท่ากับ 1 ในเวลาเดียวกันได้

เงื่อนไขการเปรียบเทียบจะถูกป้อนในฟิลด์ "Variable"

อย่าลืมใช้การหน่วงเวลาเมื่อระบุเงื่อนไขการเปรียบเทียบในลูกศร

'01.09.2020'`` < '11.10.2020'

'11.10.2020' >= ``current_date

current_date == date

current_time >= '18:00'

current_time <= '21:00'

วิธีตั้งค่าช่วงเวลา

ฟังก์ชันที่มีประโยชน์มากสำหรับการทำงานกับช่วงเวลาคือ:

time_interval('start_time', 'end_time')

ฟังก์ชันจะคืนค่าเชิงตรรกะ True หรือ False

ใช้ฟังก์ชันนี้ในบล็อกเป็นเงื่อนไขในฟิลด์ "Variable to compare" หรือภายในเครื่องคิดเลขโดยใช้ IF()

ฟังก์ชันนี้ช่วยให้คุณตรวจสอบว่า เวลาปัจจุบัน อยู่ในช่วงที่ระบุหรือไม่

time_interval('10:00','19:00') - ตรวจสอบช่วงเวลาตั้งแต่ 10.00 น. ถึง 19.00 น.

time_interval('19:00','07:00') - ตรวจสอบช่วงเวลาตั้งแต่ 19.00 น. ถึง 07.00 น.

time_interval('18.10.2021 10:00','25.10.2021 23:59:59') - ตรวจสอบช่วงเวลาระหว่างวันที่ต่างกัน

time_interval('#{current_date} 10:00','#{date} 19:00') - ตรวจสอบช่วงเวลาที่กำหนดโดยใช้ตัวแปร

มาดูตัวอย่างแรกกันอย่างละเอียด ฟังก์ชันอ่านได้ดังนี้:

หากผู้ใช้ส่งข้อความที่มีคำว่า "เวลา" ในช่วงเวลาตั้งแต่ 10:00 ถึง 19:00 เงื่อนไขจะคืนค่าเป็นจริง มิฉะนั้นจะคืนค่าเป็นเท็จ

ซึ่งช่วยให้คุณสร้างการตอบกลับที่แตกต่างกันขึ้นอยู่กับเวลาที่ลูกค้าส่งคำขอ

ตัวอย่างเช่น หากเวลาปัจจุบันอยู่ระหว่าง 10:00 ถึง 19:00 ลูกค้าจะได้รับ:
"ผู้จัดการจะตอบกลับคุณเร็วๆ นี้"

ในเวลาอื่นๆ พวกเขาจะได้รับ:
"ขณะนี้ผู้จัดการไม่ว่าง คุณจะได้รับการตอบกลับในช่วงเวลาทำงานตั้งแต่ 10:00 น."

ในฟิลด์เครื่องคิดเลข ให้ป้อน:

response = if(time_interval('10:00','19:00'), "ผู้จัดการจะตอบกลับคุณเร็วๆ นี้", "ขณะนี้ผู้จัดการไม่ว่าง คุณจะได้รับการตอบกลับในช่วงเวลาทำงานตั้งแต่ 10:00 น.")

ในฟิลด์ "ข้อความ" ให้ป้อน: #{response}

response = if(time_interval('10:00','19:00'), "ผู้จัดการจะตอบกลับคุณเร็วๆ นี้", "ขณะนี้ผู้จัดการไม่ว่าง คุณจะได้รับการตอบกลับในช่วงเวลาทำงานตั้งแต่ 10:00 น.")

วิธีค้นหาเวลาที่เหลือจนถึงวัน D

ในการคำนวณเวลาที่เหลือจนถึงวัน D:

กำหนดวันที่และเวลาของเป้าหมายที่คุณต้องการนับถอยหลัง

date_D = 10.10.2021 time_D = 12:00

แปลงเป็นรูปแบบ timestamp:

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

บันทึกเวลาปัจจุบันในรูปแบบ timestamp:

timestamp0 = #{timestamp}

ปัดเศษค่าที่ได้ให้เป็นจำนวนเต็ม:

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

คำนวณความแตกต่างเป็นวินาที:

time = timeD - time0

หารด้วยจำนวนวินาทีในหนึ่งวัน และปัดเศษผลลัพธ์:

full_days = time/86400

days = int(#{full_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

และแสดงเวลาในฟิลด์ "ข้อความ":

เวลาที่เหลือจนกว่าเริ่มต้น: #{days} วัน #{hours} ชั่วโมง #{minutes} นาที และ #{seconds} วินาที

นี่คือโค้ดสำหรับแทรกในฟิลด์ "เครื่องคิดเลข":

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

เครื่องคิดเลข ยังรองรับการลบวันที่และเวลาโดยไม่ต้องแปลงประเภท ตัวอย่างเช่น:

'11.12.2021' - '8.12.2021' คืนค่า 3 (วัน)

'11:12' - '3:45' คืนค่า 447 (นาที)

วิธีค้นหาวันเกิดถัดไป

เพื่อให้บอทส่งคำอวยพรวันเกิด คุณสามารถใช้ฟังก์ชัน:

birthdate(date) - คืนค่าวันเกิดถัดไปที่จะมาถึงตามวันเกิดของบุคคล: reminder = birthdate('28.04.1994')

วิธีรับวันที่ของวันในสัปดาห์ที่ระบุ

หากคุณมีการส่งจดหมายซ้ำในวันในสัปดาห์ที่ระบุ คุณสามารถรับวันที่ของวันในสัปดาห์นั้นเพื่อกำหนดเวลาการส่งจดหมาย

weekday_date(weekday, b) - คืนค่าวันที่ของวันในสัปดาห์ที่ใกล้ที่สุดที่ระบุ ใช้ สองพารามิเตอร์:

พารามิเตอร์แรกคือหมายเลขวันในสัปดาห์ ที่จะค้นหา (ตั้งแต่ 1 ถึง 7 โดยที่ 1 = วันจันทร์, 7 = วันอาทิตย์)

พารามิเตอร์ที่สอง ระบุว่า จะคืนค่าวันที่ของวันนี้หรือไม่หากวันในสัปดาห์ที่ระบุคือวันนี้ พารามิเตอร์นี้เป็นตัวเลือกและค่าเริ่มต้นคือ False

มาดูตัวอย่างเพื่อทำความเข้าใจว่าพารามิเตอร์ที่สองทำงานอย่างไร:

คุณต้องการกำหนดเวลาส่งข้อความในวันพฤหัสบดี

แต่ถ้าลูกค้าเพิ่งลงทะเบียนในวันพฤหัสบดีล่ะ?

ควรส่งข้อความในวันพฤหัสบดีนี้หรือวันพฤหัสบดีหน้า?

การตั้งค่าพารามิเตอร์ที่สองเป็น False หมายความว่าข้อความจะถูกส่งในวันพฤหัสบดีถัดไปเท่านั้น (ข้ามวันนี้)

การตั้งค่าพารามิเตอร์ที่สองเป็น True หมายความว่าข้อความจะถูกส่งในวันพฤหัสบดีนี้ หากวันนี้คือวันพฤหัสบดี (รวมถึงวันที่ลงทะเบียน)

ในตัวอย่างของเรา ผู้ใช้ลงทะเบียนในวันพฤหัสบดีที่ 13.02.2025 และเราต้องการส่งข้อความในวันพฤหัสบดีถัดไป
ดังนั้น ค่าที่ส่งคืนจะเป็น "20.02.2025"

ตัวอย่างเช่น weekday_date(4) จะคืนค่า '20.02.2025'

หากคุณต้องการให้นับวันปัจจุบันเฉพาะจนถึงเวลาที่กำหนด คุณสามารถใช้โครงสร้างนี้:

weekday_date(4, current_time < '13:00') โดยที่เงื่อนไขสามารถแทนที่ด้วยเงื่อนไขอื่นที่คุณต้องการ

นี่คือตัวอย่างวิธีใช้ฟังก์ชัน:

ตัวอย่างการใช้ฟังก์ชันในฟิลด์ "วันที่ส่ง" ของการเชื่อมต่อ

วิธีรับวันที่ของวันที่ระบุในเดือน

หากคุณมีการดำเนินการซ้ำในวันที่ระบุของเดือน คุณสามารถรับวันที่ของวันที่นั้นที่ใกล้ที่สุดเพื่อกำหนดเวลาการส่งจดหมาย

month_date(date, b) - คืนค่าวันที่ของเดือนที่ใกล้ที่สุดสำหรับหมายเลขวันที่ที่ระบุ ใช้ สองพารามิเตอร์:

date - หมายเลขวันของเดือนที่จะค้นหา (ตั้งแต่ 1 ถึง 31)

b - พารามิเตอร์เสริม ระบุว่าจะคืนค่าวันที่ของวันนี้หรือไม่หากตรงกับวันที่ที่ระบุ ค่าเริ่มต้นคือ False

หากคุณส่ง 31 แต่เดือนปัจจุบันมีเพียง 30 วัน ฟังก์ชันจะคืนค่าวันสุดท้ายของเดือน (เช่น วันที่ 30)

ตัวอย่างเช่น:

หากวันนี้คือ 05.04.2022 และคุณเรียก t = month_date(1) ผลลัพธ์จะเป็น 01.05.2022 - วันที่ 1 ของเดือนที่ใกล้ที่สุดหลังจากวันนี้

วิธีตรวจสอบว่าเวลาปัจจุบันอยู่ในช่วงเวลาทำงานหรือไม่

ตัวอย่างเช่น บริษัททำงานตั้งแต่ 9:00 น. ถึง 18:00 น. และหยุดในวันเสาร์และอาทิตย์ มาสร้างการตรวจสอบทีละขั้นตอน:

  1. ตรวจสอบว่าเวลาอยู่ในช่วงเวลาทำงานหรือไม่: current_time >= '9:00' AND current_time <= '18:00'
  2. ตรวจสอบว่าเวลาอยู่นอกช่วงเวลาทำงานหรือไม่: current_time < '9:00' OR current_time > '18:00'
  3. ตรวจสอบว่าวันนี้เป็นวันทำงานหรือไม่ (ไม่ใช่วันเสาร์หรือวันอาทิตย์): weekday != 6 AND weekday != 7
  4. รวมเงื่อนไขสำหรับการเขียนในช่วงเวลาทำงาน: current_time >= '9:00' AND current_time <= '18:00' AND weekday != 6 AND weekday != 7
  5. รวมเงื่อนไขสำหรับการเขียนนอกเวลาทำงาน: current_time < '9:00' OR current_time > '18:00' OR weekday == 6 OR weekday == 7

วิธีแปลงวันที่และเวลา

รูปแบบวันที่-เวลาที่ใช้แตกต่างกันไปในแต่ละระบบ และเป็นไปได้ที่หนึ่งในทรัพยากรที่รวมเข้าด้วยกันจะส่งคืนเวลาในรูปแบบที่ MaviBot ไม่รู้จัก คุณจะต้องแปลงมัน

convert_datetime(date, fin, f_out) - แปลงวันที่และเวลา

มีสามพารามิเตอร์:

  • สตริงวันที่อินพุต
  • สตริงรูปแบบอินพุต
  • สตริงรูปแบบเอาต์พุต

ตัวอย่าง:
convert_datetime("2011-11-03", "%Y-%m-%d", "%Y/%m/%d") ผลลัพธ์จะเป็น 2011/11/03

ฟังก์ชันนี้แปลงวันที่ที่เข้ามาเป็น timestamp

#{current_date} #{current_time} - แปลงเป็น "06.01.2025 11:45" — เนื่องจากไม่มีข้อมูลเกี่ยวกับวินาทีหรือไมโครวินาที timestamp ที่ได้จะมีศูนย์หลังจุดทศนิยม

ตัวอย่างเช่น: 1736144700.000000

หากคุณรวมมิลลิวินาทีหลังจุดทศนิยม

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

ผลลัพธ์จะเป็น: 1736166395.123456

get_datetime(format) - ฟังก์ชันสำหรับรับเวลาปัจจุบันในรูปแบบเฉพาะ

ฟังก์ชันรับหนึ่งพารามิเตอร์ — สตริงที่ระบุรูปแบบเอาต์พุตที่ต้องการ

สำคัญ! การตอบสนองของฟังก์ชันจะเป็น (วันจันทร์, วันอังคาร, ฯลฯ)

ตัวอย่าง: get_datetime("%A") ผลลัพธ์จะเป็น Wednesday

คำอธิบายของพารามิเตอร์สตริงรูปแบบ ซึ่งระบุในฟังก์ชันเป็นสตริงที่อยู่ในเครื่องหมายคำพูด:

สัญลักษณ์อื่นๆ ทั้งหมดหมายถึงตัวมันเอง

คุณสามารถรับ timestamp ปัจจุบันได้โดยใช้: convert_datetime("#{current_date} #{current_time}", "%d.%m.%Y %H:%M", "%s")

แสดงวันที่ปัจจุบันในรูปแบบ "dd ชื่อเดือน"

ในการแสดงวันที่ในรูปแบบ "dd ชื่อเดือน" ให้ใช้ฟังก์ชัน current_date_eng()

หากคุณต้องการเพิ่มจำนวนวันที่กำหนดให้กับวันที่นี้ คุณควรระบุจำนวนวันที่ต้องการเป็นพารามิเตอร์ในฟังก์ชัน

ตัวอย่างเช่น หากวันนี้คือวันที่ 3 เมษายน ฟังก์ชันจะคืนค่า:

current_date_eng() - April 3rd

current_date_eng(2) - April 5th

current_date_eng(-2) - April 1st