# 📅 سورس کد تبدیل تاریخ شمسی — کامل و تستشده
یک ماژول آماده و حرفهای برای تبدیل دوطرفه تاریخ شمسی و میلادی، همراه با سه نسخه پاداش در پایتون، جاوااسکریپت و PHP.
---
## ✅ چرا این سورس با بقیه فرق دارد؟
بیشتر سورسهای تبدیل تاریخ که در بازار پیدا میکنید از یک تقریب ساده استفاده میکنند: «هر ۳۳ سال، ۸ سال کبیسه». این روش روی بازههای بلند **یک روز خطا میدهد** و خروجیاش با تقویم رسمی ایران نمیخواند.
این محصول از **الگوریتم رسمی تقویم هجری شمسی** (روش خیام — همان مبنای کتابخانههای معتبر جهانی مثل jalaali-js) استفاده میکند.
و مهمتر: **اعتبارسنجی شده است.** در فرایند ساخت، ۵۵٬۱۵۲ روز بهصورت رفتوبرگشت تبدیل شد — صفر خطا.
| تست | تعداد | نتیجه |
|---|---|---|
| رفتوبرگشت شمسی ↔ میلادی | ۵۵٬۱۵۲ روز | صفر خطا |
| تطابق روز هفته با تقویم استاندارد | ۱۰٬۹۵۷ روز | صفر خطا |
| نوروز سالهای ۱۳۷۹ تا ۱۴۰۵ | ۲۷ سال | دقیق |
| روز اول فروردین هر سال | ۱۱۷۸ تا ۱۶۳۳ | صفر خطا |
| سالهای کبیسه | ۲۴ سال آزمون | دقیق |
---
## 🎁 چه چیزی دریافت میکنید؟
### نسخه اصلی — B4A (Basic4Android)
- `JalaliDate.bas` — ماژول کامل با توضیحات فارسی خطبهخط
- `Main.bas` — اپ نمونه با رابط کاربری آماده
- بدون نیاز به فایل لایوت — رابط کاربری کامل در کد ساخته میشود
### سه نسخه هدیه
- 🐍 **پایتون ۳** — `jalali.py` — بدون هیچ وابستگی بیرونی
- 🟨 **جاوااسکریپت** — `jalali.js` — مرورگر، Node.js، React، Vue
- 🐘 **PHP 8** — `jalali.php` — با تابع کمکی مخصوص وردپرس
هر سه نسخه با فایل تست کامل همراهاند و همین الان قابل اجرا هستند.
---
## ✨ امکانات
- 🔄 تبدیل دوطرفه شمسی ↔ میلادی
- 🗓️ کبیسهشناسی دقیق و مطابق تقویم رسمی ایران
- 📛 نام ماه، روز هفته و فصل به فارسی
- 🔢 تبدیل ارقام فارسی ↔ لاتین
- 💰 جداکننده هزارگان با ارقام فارسی (۱,۲۳۴,۵۶۷)
- ✅ اعتبارسنجی — تاریخ `۱۴۰۲/۱۲/۳۰` را قبول نمیکند (چون وجود ندارد)
- 🔍 تجزیه متن — `۱۴۰۵/۰۶/۲۲` و `1405-6-22` و `1405.6.22` و `1405/6/22`
- ➕ محاسبات — افزودن روز، فاصله دو تاریخ، تبدیل به بازه خوانا
- 🎨 قالببندی دلخواه — `dddd j jjj jjjj` ← «یکشنبه ۲۲ شهریور ۱۴۰۵»
- 📴 کاملاً آفلاین — بدون API، بدون اینترنت، بدون کتابخانه بیرونی
- 🌐 سال ۱۱۷۸ تا ۱۶۳۳ شمسی (حدود ۴۵۵ سال)
---
## 💻 نمونه کد
**B4A:**
```
Dim j As Jalali = JalaliDate.Today
Log(JalaliDate.FullName(j)) ' «یکشنبه ۲۲ شهریور ۱۴۰۵»
Dim g As Gregorian = JalaliDate.ToGregorian(1405, 6, 22)
Log(g.Year & "-" & g.Month & "-" & g.Day) ' 2026-9-13
```
**پایتون:**
```
from jalali import Jalali
j = Jalali(1405, 6, 22)
print(j.full_name) # «یکشنبه ۲۲ شهریور ۱۴۰۵»
print(j.to_gregorian()) # (2026, 9, 13)
```
**PHP (مخصوص وردپرس):**
```
require_once 'jalali.php';
echo Jalali::format(Jalali::today(), 'dddd j jjj jjjj');
echo Jalali::wpDate(get_the_time('U'));
```
---
## 📦 محتویات بسته
```
TaghirTarikh/
├── Main.bas اپ نمونه با رابط کاربری
├── Modules/JalaliDate.bas ★ ماژول اصلی
├── Bonus/python/jalali.py
├── Bonus/javascript/jalali.js
├── Bonus/php/jalali.php
├── Bonus/*/test_* تستهای آماده اجرا
├── README.md راهنمای کامل فارسی
└── گزارش-تست-کامل.txt خروجی تمام تستها
```
---
## 🛠️ پیشنیازها
| پلتفرم | نیاز |
|---|---|
| B4A | نسخه ۹ به بالا + کتابخانههای `Core` و `Regex` |
| پایتون | نسخه ۳.۶ به بالا — بدون وابستگی |
| جاوااسکریپت | هر مرورگر مدرن یا Node.js 6+ |
| PHP | نسخه ۷.۰ به بالا — بدون افزونه |
---
## 🎯 مناسب برای
- اپلیکیشنهای فروشگاهی، حسابداری و مدیریتی
- فرمهای ثبت تاریخ تولد، قرار و تاریخ انقضا
- نمایش تاریخ شمسی روی ویجت یا نوتیفیکیشن
- سایتهای وردپرسی فارسی
- هر پروژهای که تاریخ شمسی درست میخواهد
---
## 📄 مجوز
استفاده در پروژههای شخصی و تجاری شما آزاد است، بدون محدودیت تعداد.
فروش مجدد یا انتشار بهعنوان محصول مستقل مجاز نیست.
---
💬 سوالی دارید؟ از بخش تماس با ما یا تیکت پشتیبانی پیام بدهید.
| دستهبندی | سورس کد اندروید |
| تاریخ انتشار | ۲۲ شهریور ۱۴۰۵ - ۰۱:۳۲ |
| تعداد بازدید | ۶ |
| تعداد فروش | ۰ |
| فرمت تحویل | فایل دانلودی (بعد از پرداخت آنی فعال میشود) |
| پشتیبانی | تیکت پشتیبانی در پنل کاربری |
ویژگیهای کلیدی
- تبدیل دوطرفه شمسی ↔ میلادی
- الگوریتم رسمی تقویم هجری (روش خیام) — بدون خطای کبیسه
- تستشده روی ۵۵٬۱۵۲ روز رفتوبرگشت — صفر خطا
- چهار زبان: B4A، پایتون، جاوااسکریپت، PHP
- نام ماه، روز هفته و فصل به فارسی
- تبدیل ارقام فارسی ↔ لاتین + جداکننده هزارگان
- اعتبارسنجی تاریخ (۱۴۰۲/۱۲/۳۰ را قبول نمیکند)
- افزودن روز، فاصله دو تاریخ، بازه خوانا
- قالببندی دلخواه با الگوی ساده
- aپ نمونه B4A با رابط کاربری آماده — بدون فایل لایوت
- مستندات کامل فارسی + مرجع تمام توابع
- کاملاً آفلاین — بدون API و بدون کتابخانه بیرونی
هنوز نظری ثبت نشده است. اولین نفر باشید!
برای ثبت نظر وارد شوید. (ثبت نظر پس از خرید فعال میشود)
' ═══ نمونهای از سورس (بخش کوتاهی از ماژول) ═══
' تبدیل میلادی → شمسی
Public Sub FromParts(gy As Int, gm As Int, gd As Int) As Jalali
Return JDNToJalali(GregorianToJDN(gy, gm, gd))
End Sub
' الگوریتم با شماره روز جولیَن (JDN) کار میکند:
' یک عدد پیوسته که تبدیل را بدون دردسر تقویمی میکند.
Private Sub JalaliToJDN(jy As Int, jm As Int, jd As Int) As Long
Dim march As Int = MarchDay(jy)
Dim jdn As Long = GregorianToJDN(jy + 621, 3, march)
jdn = jdn + (jm - 1) * 31 - ((jm \ 7) * (jm - 7)) + jd - 1
Return jdn
End Sub
' ── استفاده ──
Dim j As Jalali = JalaliDate.Today
Log(JalaliDate.FullName(j)) ' «یکشنبه ۲۲ شهریور ۱۴۰۵»
⚠ در نسخه کامل توضیحات خطبهخط فارسی و ۳۵ تابع مستند دارد.