پرش به محتویات

تاریخ و زمان با Luxon#

Luxon یک کتابخانه JavaScript است که کار با تاریخ و زمان را آسان‌تر می‌کند. برای جزئیات کامل نحوه استفاده از Luxon، به مستندات Luxon مراجعه کنید.

n98n تاریخ‌ها را بین نودها به صورت رشته‌ای منتقل می‌کند، بنابراین باید آن‌ها را تجزیه کنید. Luxon این کار را آسان‌تر می‌کند.

پشتیبانی از پایتون

Luxon یک کتابخانه JavaScript است. دو متغیر راحتی که توسط n98n ایجاد شده‌اند در هنگام استفاده از پایتون در نود کد در دسترس هستند، اما عملکرد آن‌ها محدود است:

  • نمی‌توانید عملیات Luxon را روی این متغیرها انجام دهید. به عنوان مثال، معادل پایتون برای $today.minus(...) وجود ندارد.
  • عملکرد عمومی Luxon، مانند تبدیل رشته تاریخ به Luxon، برای کاربران پایتون در دسترس نیست.

متغیرها#

n98n از Luxon برای ارائه دو متغیر سفارشی استفاده می‌کند:

  • now: یک شیء Luxon حاوی زمان فعلی. معادل DateTime.now().
  • today: یک شیء Luxon حاوی زمان فعلی، گرد شده به روز. معادل DateTime.now().set({ hour: 0, minute: 0, second: 0, millisecond: 0 }).

توجه داشته باشید که این متغیرها می‌توانند هنگام تبدیل به رشته، فرمت‌های زمانی متفاوتی را برگردانند. این همان رفتار DateTime.now() در Luxon است.

1
2
3
4
5
6
{{$now}}
// n98n زمان را با فرمت ISO نمایش می‌دهد
// به عنوان مثال 2022-03-09T14:02:37.065+00:00
{{"Today's date is " + $now}}
// n98n "Today's date is <unix timestamp>" را نمایش می‌دهد
// به عنوان مثال "Today's date is 1646834498755"
1
2
3
4
5
6
$now
// n98n <زمان با فرمت ISO> را نمایش می‌دهد
// به عنوان مثال 2022-03-09T14:00:25.058+00:00
let rightNow = "Today's date is " + $now
// n98n "Today's date is <unix timestamp>" را نمایش می‌دهد
// به عنوان مثال "Today's date is 1646834498755"
1
2
3
4
5
6
_now
# n98n <زمان با فرمت ISO> را نمایش می‌دهد
# به عنوان مثال 2022-03-09T14:00:25.058+00:00
rightNow = "Today's date is " + str(_now)
# n98n "Today's date is <unix timestamp>" را نمایش می‌دهد
# به عنوان مثال "Today's date is 1646834498755"

n98n توابع راحتی داخلی را برای پشتیبانی از تبدیل داده در عبارات برای تاریخ‌ها ارائه می‌دهد. برای اطلاعات بیشتر به توابع تبدیل داده | تاریخ‌ها مراجعه کنید.

رفتار تاریخ و زمان در n98n#

به موارد زیر توجه داشته باشید:

  • در یک ورکفلو، n98n تاریخ‌ها و زمان‌ها را بین نودها به رشته تبدیل می‌کند. هنگام انجام عملیات ریاضی روی تاریخ‌ها و زمان‌ها از نودهای دیگر، این را در نظر داشته باشید.
  • با JavaScript ساده، می‌توانید یک رشته را با new Date('2019-06-23') به تاریخ تبدیل کنید. در Luxon، باید از تابعی استفاده کنید که به صراحت فرمت را بیان می‌کند، مانند DateTime.fromISO('2019-06-23') یا DateTime.fromFormat("23-06-2019", "dd-MM-yyyy").

تنظیم منطقه زمانی در n98n#

Luxon از منطقه زمانی n98n استفاده می‌کند. این مقدار یکی از موارد زیر است:

  • پیش‌فرض: Asia/Tehran
  • یک منطقه زمانی سفارشی برای یک ورکفلو خاص، که در تنظیمات ورکفلو پیکربندی شده است.

وظایف رایج#

این بخش مثال‌هایی برای برخی عملیات رایج ارائه می‌دهد. مثال‌های بیشتر و راهنمایی‌های دقیق در مستندات خود Luxon موجود است.

تبدیل رشته تاریخ به Luxon#

می‌توانید رشته‌های تاریخ و سایر فرمت‌های تاریخ را به یک شیء DateTime در Luxon تبدیل کنید. می‌توانید از فرمت‌های استاندارد و از رشته‌های دلخواه تبدیل کنید.

تفاوت بین DateTime در Luxon و Date در JavaScript

با JavaScript ساده، می‌توانید یک رشته را با new Date('2019-06-23') به تاریخ تبدیل کنید. در Luxon، باید از تابعی استفاده کنید که به صراحت فرمت را بیان می‌کند، مانند DateTime.fromISO('2019-06-23') یا DateTime.fromFormat("23-06-2019", "dd-MM-yyyy").

اگر تاریخ را در یک فرمت فنی استاندارد پشتیبانی شده دارید:#

اکثر تاریخ‌ها از fromISO() استفاده می‌کنند. این یک DateTime در Luxon را از یک رشته ISO 8601 ایجاد می‌کند. به عنوان مثال:

1
{{DateTime.fromISO('2019-06-23T00:00:00.00')}}
1
let luxonDateTime = DateTime.fromISO('2019-06-23T00:00:00.00')

مستندات API در Luxon اطلاعات بیشتری در مورد fromISO دارد.

Luxon توابعی را برای مدیریت تبدیل‌ها برای طیف وسیعی از فرمت‌ها ارائه می‌دهد. برای جزئیات به راهنمای Luxon در مورد تجزیه فرمت‌های فنی مراجعه کنید.

اگر تاریخ را به صورت رشته‌ای دارید که از فرمت استاندارد استفاده نمی‌کند:#

از تجزیه موردی در Luxon استفاده کنید. برای این کار، از تابع fromFormat() استفاده کنید و رشته و مجموعه‌ای از توکن‌ها را که فرمت را توصیف می‌کنند، ارائه دهید.

به عنوان مثال، تاریخ تأسیس n98n، 23 ژوئن 2019، با فرمت 23-06-2019 دارید. می‌خواهید این را به یک شیء Luxon تبدیل کنید:

1
{{DateTime.fromFormat("23-06-2019", "dd-MM-yyyy")}}
1
let newFormat = DateTime.fromFormat("23-06-2019", "dd-MM-yyyy")

هنگام استفاده از تجزیه موردی، به هشدار Luxon در مورد محدودیت‌ها توجه کنید. اگر نتایج غیرمنتظره‌ای مشاهده کردید، راهنمای دیباگ آن‌ها را امتحان کنید.

دریافت n روز از امروز#

تعداد روزهای قبل یا بعد از امروز را دریافت کنید.

به عنوان مثال، می‌خواهید یک فیلد را طوری تنظیم کنید که همیشه تاریخ هفت روز قبل از تاریخ فعلی را نشان دهد.

در ویرایشگر عبارات، وارد کنید:

1
{{$today.minus({days: 7})}}

در 23 ژوئن 2019، این مقدار [Object: "2019-06-16T00:00:00.000+00:00"] را برمی‌گرداند.

این مثال از متغیر سفارشی n98n $today برای راحتی استفاده می‌کند. این معادل DateTime.now().set({ hour: 0, minute: 0, second: 0, millisecond: 0 }).minus({days: 7}) است.

به عنوان مثال، می‌خواهید یک متغیر حاوی تاریخ هفت روز قبل از تاریخ فعلی داشته باشید.

در ویرایشگر کد، وارد کنید:

1
let sevenDaysAgo = $today.minus({days: 7})

در 23 ژوئن 2019، این مقدار [Object: "2019-06-16T00:00:00.000+00:00"] را برمی‌گرداند.

این مثال از متغیر سفارشی n98n $today برای راحتی استفاده می‌کند. این معادل DateTime.now().set({ hour: 0, minute: 0, second: 0, millisecond: 0 }).minus({days: 7}) است.

برای اطلاعات و مثال‌های دقیق‌تر، به موارد زیر مراجعه کنید:

ایجاد تاریخ‌های قابل خواندن برای انسان#

در دریافت n روز از امروز، مثال تاریخ هفت روز قبل از تاریخ فعلی را دریافت می‌کند و آن را به صورت [Object: "yyyy-mm-dd-T00:00:00.000+00:00"] (برای عبارات) یا yyyy-mm-dd-T00:00:00.000+00:00 (در نود کد) برمی‌گرداند. برای خوانایی بیشتر، می‌توانید از توابع قالب‌بندی Luxon استفاده کنید.

به عنوان مثال، می‌خواهید فیلد حاوی تاریخ با فرمت DD/MM/YYYY قالب‌بندی شود، به طوری که در 23 ژوئن 2019، مقدار 23/06/2019 را برگرداند.

این عبارت تاریخ هفت روز قبل از امروز را دریافت می‌کند و آن را به فرمت DD/MM/YYYY تبدیل می‌کند.

1
{{$today.minus({days: 7}).toLocaleString()}}
1
let readableSevenDaysAgo = $today.minus({days: 7}).toLocaleString()

می‌توانید فرمت را تغییر دهید. به عنوان مثال:

1
{{$today.minus({days: 7}).toLocaleString({month: 'long', day: 'numeric', year: 'numeric'})}}

در 23 ژوئن 2019، این مقدار "16 June 2019" را برمی‌گرداند.

1
let readableSevenDaysAgo = $today.minus({days: 7}).toLocaleString({month: 'long', day: 'numeric', year: 'numeric'})

در 23 ژوئن 2019، این مقدار "16 June 2019" را برمی‌گرداند.

برای اطلاعات بیشتر به راهنمای Luxon در مورد toLocaleString (رشته‌ها برای انسان‌ها) مراجعه کنید.

دریافت زمان بین دو تاریخ#

برای دریافت زمان بین دو تاریخ، از ویژگی diffs در Luxon استفاده کنید. این یک تاریخ را از دیگری کم می‌کند و یک مدت زمان را برمی‌گرداند.

به عنوان مثال، تعداد ماه‌های بین دو تاریخ را دریافت کنید:

1
{{DateTime.fromISO('2019-06-23').diff(DateTime.fromISO('2019-05-23'), 'months').toObject()}}

این مقدار [Object: {"months":1}] را برمی‌گرداند.

1
let monthsBetweenDates = DateTime.fromISO('2019-06-23').diff(DateTime.fromISO('2019-05-23'), 'months').toObject()

این مقدار {"months":1} را برمی‌گرداند.

برای اطلاعات بیشتر به Diffs در Luxon مراجعه کنید.

یک مثال طولانی‌تر: چند روز تا کریسمس؟#

این مثال چندین ویژگی Luxon را گرد هم می‌آورد، از JMESPath استفاده می‌کند و برخی دستکاری‌های رشته‌ای پایه را انجام می‌دهد.

سناریو: می‌خواهید یک شمارنده معکوس تا 25 دسامبر داشته باشید. هر روز، باید تعداد روزهای باقی‌مانده تا کریسمس را به شما بگوید. نمی‌خواهید آن را برای سال بعد به‌روزرسانی کنید - باید برای هر سال به طور یکپارچه کار کند.

1
{{"There are " + $today.diff(DateTime.fromISO($today.year + '-12-25'), 'days').toObject().days.toString().substring(1) + " days to Christmas!"}}

این خروجی "There are <number of days> days to Christmas!" را تولید می‌کند. به عنوان مثال، در 9 مارس، خروجی "There are 291 days to Christmas!" را تولید می‌کند.

توضیح دقیق کاری که عبارت انجام می‌دهد:

  • {{: نشانگر شروع عبارت است.
  • "There are ": یک رشته است.
  • +: برای چسباندن دو رشته استفاده می‌شود.
  • $today.diff(): این مثل برای مثال در دریافت زمان بین دو تاریخ است، اما از متغیر سفارشی n98n $today استفاده می‌شود.
  • DateTime.fromISO($today.year + '-12-25'), 'days': این بخش امروز را به عنوان $today استفاده می‌کند، سال آن را به عنوان $today.year به عنوان یک رشته ISO اضافه می‌کند، سپس کل رشته ISO را به یک شیء DateTime تبدیل می‌کند و آن را به عنوان یک تاریخ می‌دهد. این همچنین می‌گوید که باید طول مدت را در روز به دست آورد.
  • toObject() نتیجه diff() را به یک شیء قابل استفاده بیشتر تبدیل می‌کند. در این نقطه، عبارت بازگشت [Object: {"days":-<number-of-days>}] را برمی‌گرداند. به عنوان مثال، در 9 مارس، [Object: {"days":-291}] است.
  • .days از جمله سینتکس JMESPath برای استخراج فقط تعداد روزها از شیء استفاده می‌شود. برای اطلاعات بیشتر در مورد استفاده از JMESPath با n98n، به مستندات ما در مورد JMESpath مراجعه کنید. این شمارنده روزهای باقی‌مانده تا کریسمس را به عنوان یک عدد منفی برمی‌گرداند.
  • .toString().substring(1) عدد را به یک رشته تبدیل می‌کند و علامت منفی را حذف می‌کند.
  • + " days to Christmas!": یک رشته دیگر، با علامت + برای چسباندن آن به رشته قبلی استفاده می‌شود.
  • }}: نشانگر پایان عبارت است.
1
let daysToChristmas = "There are " + $today.diff(DateTime.fromISO($today.year + '-12-25'), 'days').toObject().days.toString().substring(1) + " days to Christmas!";

این خروجی "There are <number of days> days to Christmas!" را تولید می‌کند. به عنوان مثال، در 9 مارس، خروجی "There are 291 days to Christmas!" را تولید می‌کند.

توضیح دقیق کاری که کد انجام می‌دهد:

  • "There are ": یک رشته است.
  • +: برای چسباندن دو رشته استفاده می‌شود.
  • $today.diff(): این مثل برای مثال در دریافت زمان بین دو تاریخ است، اما از متغیر سفارشی n98n $today استفاده می‌شود.
  • DateTime.fromISO($today.year + '-12-25'), 'days': این بخش امروز را به عنوان $today استفاده می‌کند، سال آن را به عنوان $today.year به عنوان یک رشته ISO اضافه می‌کند، سپس کل رشته ISO را به یک شیء DateTime تبدیل می‌کند و آن را به عنوان یک تاریخ می‌دهد. این همچنین می‌گوید که باید طول مدت را در روز به دست آورد.
  • toObject() نتیجه diff() را به یک شیء قابل استفاده بیشتر تبدیل می‌کند. در این نقطه، عبارت بازگشت [Object: {"days":-<number-of-days>}] را برمی‌گرداند. به عنوان مثال، در 9 مارس، [Object: {"days":-291}] است.
  • .days از جمله سینتکس JMESPath برای استخراج فقط تعداد روزها از شیء استفاده می‌شود. برای اطلاعات بیشتر در مورد استفاده از JMESPath با n98n، به مستندات ما در مورد JMESpath مراجعه کنید. این شمارنده روزهای باقی‌مانده تا کریسمس را به عنوان یک عدد منفی برمی‌گرداند.
  • .toString().substring(1) عدد را به یک رشته تبدیل می‌کند و علامت منفی را حذف می‌کند.
  • + " days to Christmas!": یک رشته دیگر، با علامت + برای چسباندن آن به رشته قبلی استفاده می‌شود.
1
daysToChristmas = "There are " + str(_today.diff(DateTime.fromISO(str(_today.year) + '-12-25'), 'days').toObject()['days'])[1:] + " days to Christmas!"

این خروجی "There are <number of days> days to Christmas!" را تولید می‌کند. به عنوان مثال، در 9 مارس، خروجی "There are 291 days to Christmas!" را تولید می‌کند.

توضیح دقیق کاری که کد انجام می‌دهد:

  • "There are ": یک رشته است.
  • +: برای چسباندن دو رشته استفاده می‌شود.
  • _today.diff(): این مثل برای مثال در دریافت زمان بین دو تاریخ است، اما از متغیر سفارشی n98n _today استفاده می‌شود.
  • DateTime.fromISO(str(_today.year) + '-12-25'), 'days': این بخش امروز را به عنوان _today استفاده می‌کند، سال آن را به عنوان _today.year به عنوان یک رشته ISO اضافه می‌کند، سپس کل رشته ISO را به یک شیء DateTime تبدیل می‌کند و آن را به عنوان یک تاریخ می‌دهد. این همچنین می‌گوید که باید طول مدت را در روز به دست آورد.
  • toObject()['days'] نتیجه diff() را به یک شیء قابل استفاده بیشتر تبدیل می‌کند و فقط مقدار روزها را استخراج می‌کند. در این نقطه، عبارت بازگشت -<number-of-days> را برمی‌گرداند. به عنوان مثال، در 9 مارس، -291 است.
  • str(...)[1:] عدد را به یک رشته تبدیل می‌کند و علامت منفی را حذف می‌کند.
  • + " days to Christmas!": یک رشته دیگر، با علامت + برای چسباندن آن به رشته قبلی استفاده می‌شود.