آموزش تبدیل تاریخ میلادی به شمسی در Google Sheets با Apps Script
اگر با گوگل شیت (Google Sheets) کار میکنید، احتمالاً با این مشکل مواجه شدهاید که تاریخها بهصورت میلادی نمایش داده میشوند، درحالیکه برای گزارشگیری، مدیریت اطلاعات یا استفاده در پروژههای ایرانی به تاریخ شمسی نیاز دارید.
برای مثال، فرض کنید در یکی از سلولهای گوگل شیت تاریخ زیر ثبت شده است:
۲۴/۰۹/۲۰۲۶ ۰۴:۳۲:۲۴
میخواهیم این تاریخ را به شکل زیر تبدیل کنیم:
۱۴۰۵/۰۷/۰۲ ۰۴:۳۲:۲۴
در این آموزش یاد میگیریم چگونه با استفاده از Google Apps Script یک تابع اختصاصی بسازیم که تاریخهای میلادی را به جلالی تبدیل کند، ساعت را حفظ کند و حتی روی یک ستون کامل اجرا شود.
چرا از Google Apps Script استفاده کنیم؟
گوگل شیت امکانات متنوعی برای مدیریت تاریخ دارد، اما تبدیل دقیق تاریخ میلادی به تقویم جلالی با فرمولهای معمولی آن چندان ساده نیست.
با Apps Script میتوانیم تابعی به نام TOJALALI ایجاد کنیم و درست مانند سایر فرمولهای گوگل شیت از آن استفاده کنیم.
مزایای این روش عبارتاند از:
- تبدیل تاریخ میلادی به شمسی بدون نصب افزونه اضافی
- پشتیبانی از تاریخ همراه با ساعت، دقیقه و ثانیه
- امکان تبدیل تاریخهای متنی و سلولهای Date
- تبدیل همزمان چندین ردیف
- استفاده مجدد از تابع در همان فایل Google Sheets
مرحله اول: باز کردن محیط Apps Script
ابتدا فایل Google Sheets موردنظر را باز کنید.
از منوی بالای صفحه مسیر زیر را انتخاب کنید:
Extensions → Apps Script
محیط برنامهنویسی گوگل در یک تب جدید باز میشود.
در قسمت ویرایشگر، فایلی با نام Code.gs مشاهده میکنید. کدهای پیشفرض آن را پاک کنید تا بتوانیم تابع اختصاصی خودمان را بنویسیم.
مرحله دوم: نوشتن تابع تبدیل تاریخ میلادی به شمسی
کد زیر را داخل فایل Code.gs قرار دهید:
/**
* Convert Gregorian date to Jalali.
* Example: =TOJALALI(A2)
*
* @customfunction
*/
function TOJALALI(value) {
if (Array.isArray(value)) {
return value.map(row => row.map(TOJALALI));
}
if (value === "" || value === null) return "";
let date;
if (value instanceof Date) {
date = value;
} else if (typeof value === "number") {
date = new Date(
Math.round((value - 25569) * 86400000)
);
} else {
const match = String(value).trim().match(
/^(\d{1,2})\/(\d{1,2})\/(\d{4})(?:\s+(\d{1,2}):(\d{2})(?::(\d{2}))?)?$/
);
if (!match) return "Invalid date";
const [, day, month, year, hour = 0,
minute = 0, second = 0] = match;
date = new Date(
Number(year),
Number(month) - 1,
Number(day),
Number(hour),
Number(minute),
Number(second)
);
if (
date.getFullYear() !== Number(year) ||
date.getMonth() !== Number(month) - 1 ||
date.getDate() !== Number(day)
) return "Invalid date";
}
const formatter = new Intl.DateTimeFormat(
"en-US-u-ca-persian",
{
timeZone: Session.getScriptTimeZone(),
year: "numeric",
month: "2-digit",
day: "2-digit",
hour: "2-digit",
minute: "2-digit",
second: "2-digit",
hourCycle: "h23"
}
);
const parts = {};
formatter.formatToParts(date).forEach(part => {
parts[part.type] = part.value;
});
return `${parts.year}/${parts.month}/${parts.day} ` +
`${parts.hour}:${parts.minute}:${parts.second}`;
}
این تابع از تقویم فارسی پشتیبانیشده توسط JavaScript استفاده میکند و نیازی به کتابخانه جانبی ندارد.
همچنین با استفاده از formatToParts، اجزای تاریخ و ساعت را بهصورت جداگانه استخراج میکند.
نکته: فرمت تاریخ متنی ورودی در این نسخه به شکل DD/MM/YYYY است؛ یعنی ابتدا روز، سپس ماه و در نهایت سال قرار میگیرد.
مرحله سوم: ذخیره و تنظیم منطقه زمانی
پس از وارد کردن کد، روی دکمه Save کلیک کنید یا کلیدهای Ctrl + S را فشار دهید.
سپس از بخش Project Settings، منطقه زمانی پروژه را بررسی کنید.
اگر تاریخهای شما مربوط به ایران هستند، منطقه زمانی زیر را انتخاب کنید:
Asia/Tehran
منطقه زمانی فایل Google Sheets را نیز از مسیر File → Settings → Time zone بررسی کنید.
هماهنگی این تنظیمات برای جلوگیری از جابهجایی ساعت در تاریخهای واقعی اهمیت دارد.
مرحله چهارم: استفاده از تابع در Google Sheets
اکنون به فایل گوگل شیت برگردید.
فرض کنید تاریخ میلادی در سلول A2 قرار دارد.
در سلول B2 فرمول زیر را وارد کنید:
=TOJALALI(A2)
نتیجه به این صورت خواهد بود:
| تاریخ میلادی | تاریخ شمسی |
|---|---|
| ۲۴/۰۹/۲۰۲۶ ۰۴:۳۲:۲۴ | ۱۴۰۵/۰۷/۰۲ ۰۴:۳۲:۲۴ |
| ۱۰/۱۰/۲۰۲۶ ۱۲:۳۰:۰۰ | ۱۴۰۵/۰۷/۱۸ ۱۲:۳۰:۰۰ |
| ۲۱/۰۳/۲۰۲۶ ۰۸:۱۵:۰۰ | ۱۴۰۵/۰۱/۰۱ ۰۸:۱۵:۰۰ |
به همین سادگی، تابع اختصاصی ما مانند یک فرمول معمولی در Google Sheets قابل استفاده است.
مرحله پنجم: تبدیل یک ستون کامل از تاریخها
اگر صدها یا هزاران ردیف اطلاعات داشته باشید، لازم نیست فرمول را برای هر سلول جداگانه وارد کنید.
فرض کنید تاریخهای میلادی در ستون A از ردیف دوم شروع شدهاند.
در سلول B2 بنویسید:
=TOJALALI(A2:A1000)
این فرمول تمام تاریخهای محدوده مشخصشده را تبدیل میکند و نتایج را در ستون B نمایش میدهد.
فقط مطمئن شوید سلولهای زیر B2 خالی هستند تا نتایج بتوانند در آنها قرار بگیرند.
نکات مهم هنگام تبدیل تاریخ
تفاوت تاریخ متنی و تاریخ واقعی
در Google Sheets تاریخها ممکن است به دو شکل ذخیره شوند:
حالت اول: متن (Text)
مثلاً:
۲۴/۰۹/۲۰۲۶ ۰۴:۳۲:۲۴
در این حالت تابع اجزای تاریخ و ساعت را از متن استخراج میکند و ساعت ورودی را حفظ میکند.
حالت دوم: تاریخ واقعی (Date time)
در این حالت Google Sheets تاریخ را بهعنوان یک مقدار زمانی ذخیره میکند. هنگام تبدیل، منطقه زمانی تنظیمشده در Apps Script میتواند بر ساعت خروجی تأثیر بگذارد.
آیا خروجی قابل استفاده در محاسبات تاریخی است؟
خروجی تابع TOJALALI از نوع متن است.
بنابراین برای نمایش تاریخ شمسی، تهیه گزارش، خروجی گرفتن و مرتبسازی رشتهای با فرمت ثابت YYYY/MM/DD مناسب است.
اما اگر قصد دارید اختلاف دو تاریخ را محاسبه کنید یا از توابعی مانند DATEDIF استفاده کنید، بهتر است تاریخ اصلی میلادی را نیز نگه دارید.
خطای Invalid date چیست؟
این خطا معمولاً زمانی نمایش داده میشود که مقدار ورودی با قالب مورد انتظار تابع هماهنگ نباشد یا تاریخ نامعتبر باشد.
برای مثال، تابع فعلی تاریخ متنی را با قالب زیر میپذیرد:
DD/MM/YYYY HH:mm:ss
اگر تاریخهای شما با قالب YYYY-MM-DD ذخیره شدهاند، باید بخش پردازش ورودی تابع را متناسب با آن تغییر دهید.
سوالات متداول
آیا Google Sheets بهصورت پیشفرض تاریخ شمسی را پشتیبانی میکند؟
گوگل شیت ابزارهایی برای قالببندی تاریخ دارد، اما برای تبدیل سفارشی و قابلکنترل تاریخ میلادی به جلالی، استفاده از Apps Script راهکار مناسبی است.
آیا برای استفاده از Apps Script باید برنامهنویسی بلد باشیم؟
خیر. کافی است کد آماده را در ویرایشگر Apps Script قرار دهید، ذخیره کنید و از فرمول TOJALALI استفاده کنید.
آیا این تابع ساعت را هم تبدیل میکند؟
بله. تابع علاوه بر تاریخ، ساعت، دقیقه و ثانیه را نیز در خروجی نمایش میدهد.
آیا میتوان هزاران تاریخ را بهصورت همزمان تبدیل کرد؟
بله. تابع از ورودی محدودهای پشتیبانی میکند. البته برای فایلهای بسیار بزرگ باید محدودیتهای زمان اجرای توابع سفارشی Google Apps Script را نیز در نظر گرفت.
آیا این تابع در Excel هم کار میکند؟
خیر. Google Apps Script مخصوص محیط گوگل است. برای Microsoft Excel باید از راهکارهای دیگری مانند Office Scripts یا توابع سفارشی استفاده کنید.
جمعبندی
تبدیل تاریخ میلادی به شمسی یکی از نیازهای رایج هنگام کار با Google Sheets، بهخصوص در گزارشهای مالی، اطلاعات مشتریان و پروژههای نرمافزاری ایرانی است.
با ساخت تابع TOJALALI در Google Apps Script میتوانیم این فرایند را ساده و خودکار کنیم.
مهمترین مزیت این روش آن است که فقط یک بار کد را به فایل اضافه میکنیم و پس از آن میتوانیم در هر سلول از فرمول زیر استفاده کنیم:
=TOJALALI(A2)
اگر با دادههای تاریخدار در گوگل شیت سروکار دارید، این تابع میتواند بخش زیادی از تبدیلهای دستی و تکراری را حذف کند.