_< HAMYAR TOP
DEBUG DEBUG
# 26
1405-04-18 00:01

تاریخ شمسی بلاخره درست شد فک کنم

ینی تاریخ شمسی و ai من رو چند ساعت پاره پوره کردن اخرش هم یه تابع برای تبدیل ساختم 😑هنوزم تازه به مرحله چک کردن نرسیده ولی فعلا تابعه اینه

fn gregorian_to_jalali(gy: i32, gm: i32, gd: i32) -> (i32, i32, i32) {
    // محاسبه تعداد روزهای سال میلادی
    let mut days_in_month = vec![31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
    if (gy % 4 == 0 && gy % 100 != 0) || (gy % 400 == 0) {
        days_in_month[1] = 29;
    }
    
    // محاسبه تعداد روزهای گذشته از ابتدای سال میلادی
    let mut day_of_year = 0;
    for i in 0..(gm - 1) as usize {
        day_of_year += days_in_month[i];
    }
    day_of_year += gd - 1;
    
    // محاسبه سال جلالی
    let mut jy = gy - 621;
    
    // محاسبه روزهای ابتدای سال جلالی نسبت به سال میلادی
    let mut jalali_days = 0;
    let mut temp_year = gy;
    let mut is_leap = false;
    
    // محاسبه روزهای کبیسه
    for y in 0..jy {
        let greg_year = y + 621;
        let is_greg_leap = (greg_year % 4 == 0 && greg_year % 100 != 0) || (greg_year % 400 == 0);
        let is_jalali_leap = (y % 4 == 0) || (y % 4 == 3);
        
        if is_greg_leap {
            jalali_days += 366;
        } else {
            jalali_days += 365;
        }
        
        if is_jalali_leap {
            jalali_days -= 1;
        }
    }
    
    // تنظیم سال جلالی
    let mut remaining_days = day_of_year;
    if remaining_days >= jalali_days % 365 {
        remaining_days -= jalali_days % 365;
    } else {
        jy -= 1;
        let prev_year = jy;
        let is_prev_jalali_leap = (prev_year % 4 == 0) || (prev_year % 4 == 3);
        remaining_days += if is_prev_jalali_leap { 366 } else { 365 };
        remaining_days -= jalali_days % 365;
    }
    
    // ماه‌های جلالی
    let month_days = vec![31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29];
    let is_jalali_leap = (jy % 4 == 0) || (jy % 4 == 3);
    
    let mut jm = 1;
    let mut jd = remaining_days + 1;
    
    for (i, &days) in month_days.iter().enumerate() {
        if i == 11 && !is_jalali_leap {
            if jd <= 29 {
                jm = (i + 1) as i32;
                break;
            }
            jd -= 29;
        } else {
            if jd <= days {
                jm = (i + 1) as i32;
                break;
            }
            jd -= days;
        }
    }
    
    (jy as i32, jm, jd)
}